RailsTutorial12章

参考

パスワード再設定

f:id:shiness:20210115171806p:plain

f:id:shiness:20210115171849p:plain

本人認証されているメールアドレスに送ることが大前提 f:id:shiness:20210115172059p:plain

f:id:shiness:20210115172234p:plain

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

データの流れ

  1. @user.send_reset_email
  2. 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つの条件

f:id:shiness:20210115180926p:plain

hidden_tagについて

実際にe_mail入力させない

ただし、今回の作業は少しだけ面倒な点があります。というのも、メールアドレスをキーとしてユーザーを検索するためには、editアクションとupdateアク>ションの両方でメールアドレスが必要になるからです。例のメールアドレス入りリンクのおかげで、editアクションでメールアドレスを取り出すことは問題>ありません。しかしフォームを一度送信してしまうと、この情報は消えてしまいます。この値はどこに保持しておくのがよいのでしょうか。今回はこのメー>ルアドレスを保持するため、隠しフィールドとしてページ内に保存する手法をとります。

edit,upadateでも@userが必要だし(get_user)正しいユーザ(valid_user)か見分ける必要がある。 get_userではemailが必要になるのでhidden_fieldが必要になる。

hidden_fieldについて

[参考] qiita.com