0
0

More than 1 year has passed since last update.

railsチュートリアル第12章 パスワードを再設定する

Posted at

パスワードを再設定する

次はPasswordResetsコントローラのeditアクションの実装を進めていきましょう。
統合テストを使ってうまく動作しているかのテストも行っていきます。

editアクションで再設定

今回はこのメールアドレスを保持するため、隠しフィールドとしてページ内に保存する手法を使い作成

パスワード再設定のフォーム

app/views/password_resets/edit.html.erb

<% provide(:title, 'Reset password') %>
<h1>Reset password</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_with(model: @user, url: password_reset_path(params[:id]),
                  local: true) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= hidden_field_tag :email, @user.email %>
      <!--隠しフィールドとしてページ内に保存する手法をとります。-->
      <!--フォームを送信した後使用するメアドが消えてしまうので
        ここに保存させる。-->

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.submit "Update password", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

パスワード再設定のeditアクション

app/controllers/password_resets_controller.rb

class PasswordResetsController < ApplicationController
  before_action :get_user,   only: [:edit, :update]
  before_action :valid_user, only: [:edit, :update]
  # その前に行う

  def new
  end

  def create
    @user = User.find_by(email: params[:password_reset][:email].downcase)
    # メールアドレスをキーとしてユーザーをデータベースから見つける
    if @user
      @user.create_reset_digest
      # パスワード再設定用トークンと
      #   送信時のタイムスタンプでデータベースの属性を更新
      @user.send_password_reset_email
      flash[:info] = "Email sent with password reset instructions"
      redirect_to root_url
    else
      flash.now[:danger] = "Email address not found"
      render 'new'
    end
  end

  def edit
  end

  private

    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
end

演習

1.
12.2.1.1で示した手順に従って、Railsサーバーのログから送信メールを探し出し、そこに記されているリンクを見つけてください。そのリンクをブラウザから表示してみて、図 12.11のように表示されるか確かめてみましょう。

確認

2.
先ほど表示したページから、実際に新しいパスワードを送信してみましょう。どのような結果になるでしょうか?

しなかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0