##パスワード再設定のメール送信
createアクションがほぼ動作するところまで持っていきました。
残すところは、パスワード再設定に関するメールを送信する部分です。
###パスワード再設定のメールとテンプレート
####パスワード再設定のリンクをメール送信する
app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
# mailにsubjectキーを引数として渡しています。
# この値は、メールの件名にあたります
end
def password_reset
@user = user
mail to: user.email, subject: "Password reset"
end
end
####パスワード再設定のテンプレート(テキスト)
app/views/user_mailer/password_reset.text.erb
To reset your password click the link below:
<%= edit_password_reset_url(@user.reset_token, email: @user.email) %>
This link will expire in two hours.
If you did not request your password to be reset, please ignore this email and
your password will stay as it is.
####パスワード再設定のテンプレート(HTML)
app/views/user_mailer/password_reset.html.erb
<h1>Password reset</h1>
<p>To reset your password click the link below:</p>
<%= link_to "Reset password", edit_password_reset_url(@user.reset_token,
email: @user.email) %>
<p>This link will expire in two hours.</p>
<p>
If you did not request your password to be reset, please ignore this email and
your password will stay as it is.
</p>
####パスワード再設定のプレビューメソッド(完成)
test/mailers/previews/user_mailer_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/user_mailer
class UserMailerPreview < ActionMailer::Preview
# Preview this email at http://rails/mailers/user_mailer/account_activation
def account_activation
# http://localhost:3000/rails/mailers/user_mailer/account_activation
user = User.first
user.activation_token = User.new_token
# activation_tokenは仮の属性でしかない
UserMailer.account_activation(user)
end
# Preview this email at http://localhost:3000/rails/mailers/user_mailer/password_reset
def password_reset
# http://localhost:3000/rails/mailers/user_mailer/password_reset
user = User.first
user.reset_token = User.new_token
UserMailer.password_reset(user)
end
end
###演習
1.
ブラウザから、送信メールのプレビューをしてみましょう。「Date」の欄にはどんな情報が表示されているでしょうか?
時日が表示されている
パスワード再設定フォームから有効なメールアドレスを送信してみましょう。また、Railsサーバーのログを見て、生成された送信メールの内容を確認してみてください。
確認
コンソールに移り、先ほどの演習課題でパスワード再設定をしたUserオブジェクトを探してください。オブジェクトを見つけたら、そのオブジェクトが持つreset_digestとreset_sent_atの値を確認してみましょう。
>> User.find_by(email: "example@railstutorial.org")
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "example@railstutorial.org"], ["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2021-10-17 05:28:48", updated_at: "2021-10-20 04:46:59", password_digest: [FILTERED], remember_digest: nil, admin: true, activation_digest: "$2a$12$x4xVHmtrDFjVPFFWav31UebLY8r9sdT8ImzSXGSrnqt...", activated: true, activated_at: "2021-10-17 05:28:48", reset_digest: "$2a$12$cG8jnT1WjbiqtKZ9ZNgMlOLDZ72VzrIZ2DdB0Nbs2kb...", reset_sent_at: "2021-10-20 04:46:59">
reset_digest: "$2a$12$cG8jnT1WjbiqtKZ9ZNgMlOLDZ72VzrIZ2DdB0Nbs2kb...",
reset_sent_at: "2021-10-20 04:46:59