Growiの管理者パスワードを手動で変更する

Page content

概要

Growiのログインパスワードを忘れてしまい、パスワードを変更しようとしたが自身が管理者だったためログインしてユーザのパスワードを変更することができない状況に陥った。 MongoDBに保存されているパスワードのハッシュ値を手動で書き換えることで解決した。

手順

  1. 環境変数PASSWORD_SEEDを確認

docker-composeを用いている場合はdocker-compse.ymlに書かれているので、その値を使う。 ここではchangemeとする。

  1. 設定したいパスワードを決める

ここではpassword024とする。

  1. パスワードのハッシュ値を計算する

growiのコードを参考に計算する。

node
> const hasher = crypto.createHash('sha256');
undefined
> hasher.update('changeme' + 'password024');  // 'PASSWORD_SEEDの値' + '設定したいパスワード'
Hash {
  _options: undefined,
  [Symbol(kHandle)]: BaseObject {},
  [Symbol(kState)]: { [Symbol(kFinalized)]: false }
}
> hasher.digest('hex');
'f2206eee5a5669a1028b4e4cf2c511056f6d5b576b7c05524b7750199bd64ce4' // パスワードのハッシュ値
  1. MongoDBのパスワードのハッシュ値を書き換える

growiデータベースのusersコレクションの当該ドキュメントを書き換える。

mongo growi
> db.users.find({email: "[email protected]"});  // パスワードを変更したいユーザのメールアドレスを指定
{ "_id" : ObjectId(...略
> db.users.update({email: "[email protected]"}, {$set: {password: "f2206eee5a5669a1028b4e4cf2c511056f6d5b576b7c05524b7750199bd64ce4"}});  // 変更する
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

updateの際に$setを指定しないと元のドキュメントのpassword以外のフィールドが全て削除されてしまうので注意。 docker-composeを用いている場合はdocker-compose exec mongo mongo growiとかでMongoDBへログイン出来るかと思う。

以上の手順を踏むとパスワードpassword024でログインできるはずだ。