higan96技術メモ

https://github.com/higan96

deviseのRemberable機能をデータベースにカラムを用意して使用する方法

deviseでは様々な機能がはじめから用意されています。それら機能はモジュール化されており開発者の用途に合わせて選択できるようになっています。


その中に「rememberable」という、所謂remember meの機能も用意されていて、その機能なのですが、少し変わった設計でして、定石通りDB上にカラムを用意してtokenを保存するという仕様にはなっていません。


具体的な仕様は、DBに保存されたencrypted_passwordというハッシュ化されたパスワードを使用して、remeber meの機能を実現しています。
参考URL:
Devise3.2.2 のデフォルト設定では、Rememberable の remember_token のカラムがないのでソースを解読してみた | EasyRamble


で、この仕様、Omniauthなんかを使ってOauthのSNS認証でユーザー機能を実装しようとすると、deviseのfriendly_tokenなんかを使ってダミーパスワードを作らないとRemember me機能が使えなくなります。


で、この問題、DeviseではオーソドックスなDB上にtokenを保存する仕様に変更できるようになっています。


その手順はいたって簡単。

remember_tokenというカラムをUsersテーブルにつくる


この情報、GithubWikiに記載がありました。その部分だけ引用します。

have a remember_token column in your model

Omniauthable, sign out action and rememberable · plataformatec/devise Wiki · GitHub

こんだけしか記載がありません。

以上のようにremember_tokenのカラムを用意すれば、ユーザーのレコードをcreateするときにfriendly_tokenを使ってpasswordを指定する必要はありません。