プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

Sorceryを使ってパスワードリセット機能を実装してみた①(学んだこと)

今回は、gem:sorceryを使ってパスワードリセット機能を実装してみたので、その過程で学んだことや解決したエラーを2記事に渡ってまとめました。

今回の実装では以下のQiitaの記事を参考にさせていただきました。

【Rails】sorceryのパスワードリセット機能(トークンがどのように使用されているのか) - Qiita
sorceryのパスワードリセットを実装(reset_passwordモジュール) - Qiita


実装する上でのポイント、学んだ事

user.rb内

validates :reset_password_token, uniqueness: true, allow_nil: true

・tokenは一度きりなので、パスワードをリセットするとtokenの中身はnilにな離、一意のものではなくなってしまいバリデーションに引っかかってしまう。そこでallow_nil: trueを記述し、nilの際にuniqueness: trueが発動しないように変更する。


sorcery.rb内のコード

Rails.application.config.sorcery.configure do |config|
  config.user_config do |user|
.
.
.
    user.reset_password_mailer = UserMailer
  end
end

・この中のuser.reset_password_mailer = UserMailerは、すでにsorcery.rb内にあるコードをコメントアウトし、UserMailerを書き込むだけで良いl。また、configファイルを変更した際は、必ずサーバーを再起動する。


password_resetsコントローラー

def edit
〜省略〜
@user = User.load_from_reset_password_token(params[:id])

load_from_reset_password_token(params[:id])について、urlから渡されたparams[:id] (トークン)によって該当するユーザーを検索すると同時にトークンの有効期限も確認し、問題がなければ@userに代入している。


・gem:configについて

本番環境、開発環境、テスト環境などでホスト(ドメイン)は変わってくるので、それを管理しやすくするためのもの。

導入すると、

config/settings/development.yml
config/settings/production.yml
config/settings/test.yml

の3種類のymlファイルが追加される。 開発環境でのホストはlocalhost:3000なので、development.ymlで host: ‘localhost:3000’のように記述する。

同様に、本番環境では自らで取得したドメインをproduction.yml内に記述すれば良い。