約束の地

キャロ組

Wekan でメールアドレス認証ができない場合

環境

  • Docker 運用
  • v0.23 2017-05-21

状況

アカウントを登録してから送られてくるメールの中の、認証URLにアクセスしても何も起きない。

結論

現状普通ではどうしようもないみたいです(下掲の Opened Issue 参照)。Minor bugとありますが、結構やっかいなバグだと思います。

むりやり対応策(概略)

データベースを直接書き換える。

むりやり対応策(具体例)

Wekan のデータベースはMongoDBなのでさっさと該当箇所を書き換えましょう。以下、Docker 運用の場合ですが、それ以外でも似た感じだと思います。

1. データベースのコンテナに入る

$ sudo docker exec -it [データベースのコンテナ名] bash

2. MongoDBに入る

# mongo
2-1. MongoDB の中身を確かめる(以下、「3.」まで飛ばしても良いです)

MongoDB のデータの中身を確認しておきます。冗長な部分を含みますので、MongoDB に習熟している方なら飛ばしてよいと思います。

2-2. データベース一覧を確かめる

データベース一覧を表示します。

> show dbs
local  0.000GB
wekan  0.005GB
2-3. 使用するデータベースを指定する

wekan というデータベースを使うように指定します。

> use wekan
switched to db wekan
2-4. コレクションの一覧を表示する

コレクションの一覧を表示してみましょう。

> show collections
accountSettings
activities
announcements
boards
card_comments
cards
cfs._tempstore.chunks
cfs.attachments.filerecord
cfs.avatars.filerecord
cfs_gridfs._tempstore.chunks
cfs_gridfs._tempstore.files
cfs_gridfs.attachments.chunks
cfs_gridfs.attachments.files
cfs_gridfs.avatars.chunks
cfs_gridfs.avatars.files
checklists
esCounts
invitation_codes
lists
meteor-migrations
meteor_accounts_loginServiceConfiguration
presences
settings
unsaved-edits
users
2-5. usersコレクション の中の ドキュメント一覧 を表示する

users コレクションに利用ユーザのデータが入っています。この中のドキュメント一覧を表示してみましょう。

> db.users.find()
{ "_id" : "maWafjsGg4nkakr4q", "createdAt" : 'ISODate("2018-02-09T03:39:26.857Z")', "services" : { "password" : { "bcrypt" :
(中略)
"username" : "foobar", "emails" : [ { "address" : "foobar@foo.bar", "verified" : false } ], "profile" : {  }, "isAdmin" : true }

表示対象件数が多すぎる場合は途中で止まります。そして Type "it" for more と表示されますので、続きを見たければ it とコマンドを送ればよいです。

2-6. wekan データベースの概要がつかめた

「2-1.」から「2-6.」までの操作で、wekan データベースの概要が理解できたと思います。

3. "verified"の値をtrueに書き換える

usersコレクション中のドキュメントの中のemails内、verifiedというキーに認証が行われたかどうかの値が格納されています。

以下のようにして、ユーザ名がmy_usernameの人のverifiedの値をtrueにしましょう。"address"の値には登録しているメールアドレスをそのまま入れます

> db.users.update( { "username" : "my_username" }, { $set : { "emails" : [ { "address" : "your@mail.address", "verified" : true } ] } } )

4. 完了

これでメールアドレスの認証が完了したことになりました。「通知」を有効にすれば、設定に従って以下のような通知メールが届くはずです。

f:id:gregminster:20170525204109p:plain

補足

"verified"の値の更新の際、"verified" : "true"のような指定だとエラーになります。同様に"verified" : 1でもエラーになります。

"verified" : trueと指定しなければいけません。

参考(その1)

MongoDBのコマンドに関しては以下のページがめちゃくちゃ分かりやすかったです(感謝!)。

参考(その2)

以下の Issue が参考になりました。

Powered by はてなブログ