Growiの管理者パスワードを手動で変更する
Page content
概要
Growiのログインパスワードを忘れてしまい、パスワードを変更しようとしたが自身が管理者だったためログインしてユーザのパスワードを変更することができない状況に陥った。 MongoDBに保存されているパスワードのハッシュ値を手動で書き換えることで解決した。
手順
- 環境変数
PASSWORD_SEED
を確認
docker-composeを用いている場合はdocker-compse.yml
に書かれているので、その値を使う。
ここではchangeme
とする。
- 設定したいパスワードを決める
ここではpassword024
とする。
- パスワードのハッシュ値を計算する
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' // パスワードのハッシュ値
- 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
でログインできるはずだ。