RailsTutorial12章
参考
パスワード再設定
本人認証されているメールアドレスに送ることが大前提
email情報が渡されてくる。 emailを小文字にしておく!ユーザいますか?チェック
def create @user = User.find_by(email: params[:password_reset][:email].downcase) if @user @user.create_reset_digest @user.send_password_reset_email
selfはユーザオブジェクト。呼び出しているあなたを引数を渡してね
def send_password_reset_email UserMailer.password_reset(self).deliver_now end
データの流れ
- @user.send_reset_email
- UserMailer.password_reset(self).deliver_now
3. def password_reset(user) 4. @user = user mail to: user.email, subject: "Password reset" end
activatonのところの処理を2つに分けたイメージ editアクションを呼び出したときにチェックして 最終的にうまくいったら実行する。 だめだったらリダイレクトする。
before_action :get_user, only: [:edit, :update] before_action :valid_user, only: [:edit, :update] def get_user @user = User.find_by(email: params[:email]) end # 正しいユーザーかどうか確認する def valid_user unless (@user && @user.activated? && @user.authenticated?(:reset, params[:id])) redirect_to root_url end end
パスワード更新の3つの条件
hidden_tagについて
実際にe_mail入力させない
ただし、今回の作業は少しだけ面倒な点があります。というのも、メールアドレスをキーとしてユーザーを検索するためには、editアクションとupdateアク>ションの両方でメールアドレスが必要になるからです。例のメールアドレス入りリンクのおかげで、editアクションでメールアドレスを取り出すことは問題>ありません。しかしフォームを一度送信してしまうと、この情報は消えてしまいます。この値はどこに保持しておくのがよいのでしょうか。今回はこのメー>ルアドレスを保持するため、隠しフィールドとしてページ内に保存する手法をとります。
edit,upadateでも@userが必要だし(get_user)正しいユーザ(valid_user)か見分ける必要がある。 get_userではemailが必要になるのでhidden_fieldが必要になる。
hidden_fieldについて
[参考] qiita.com