Rails Devise: パスワードリセットトークンを設定し、ユーザーをリダイレクトする 質問する

Rails Devise: パスワードリセットトークンを設定し、ユーザーをリダイレクトする 質問する

私のアプリでは、特定のユースケースのために新しいユーザーを作成し(プログラムでパスワードを設定)、確認メールを送信します。

確認後すぐにパスワードを変更できるようにしたい(送信したくないシステム生成のパスワードを入力しなくてもよい)

実際には、
1) システムが生成されたパスワードで新しいユーザー アカウントを作成します。2
) システムが確認メールを送信します。3
) ユーザーが確認をクリックし、パスワードを入力するようにリダイレクトされます (実際には、以下のような URL に送信されます)。

<a href="http://localhost:3000/users/password/edit?reset_password_token=v5Q3oQGbsyqAUUxyqLtb">Change my password</a>

どのような助けやアドバイスもいただければ幸いです。

ベストアンサー1

提案されたリンクを使用して、ユーザーが電子メール アドレスを確認し、初期パスワードを設定する手順を 1 つだけ実行する簡単な方法です...

アプリが生成した reset_password_token を含むメールを 1 通送信し、ユーザーがそのトークンを所有していることをそのメール アドレスの有効性の確認とみなします。

システム アカウント生成コードでは、ユーザー モデルが :recoverable および :database_authenticatable Devise モジュールで設定されていると想定しています...

acct = User.new
acct.password = User.reset_password_token #won't actually be used...  
acct.reset_password_token = User.reset_password_token 
acct.email = "[email protected]" #assuming users will identify themselves with this field
#set other acct fields you may need
acct.save

初期パスワードを設定するときに、デバイス パスワード リセット ビューをユーザーにとってもう少しわかりやすくします。

ビュー/デバイス/パスワード/edit.html.erb

...
<%= "true" == params[:initial] ? "Set your password" : "Reset your password" %>
...  

生成された電子メール

Hi <%= @user.name %>
An account has been generated for you.
Please visit www.oursite.com/users/password/edit?initial=true&reset_password_token=<%= @user.reset_password_token %> to set your password.

アプリによって作成されたアカウントは、メール内の reset_password_token がないとアクセスされないため、User モデルに :confirmable Devise モジュールを含める必要はありません。

Devise は送信を処理し、reset_password_token フィールドをクリアします。

メソッドとフレンズの詳細についてはdevise_gem_folder/lib/devise/models/recoverable.rb、 と を参照してください。database_authenticatable.rbreset_password_token

:confirmableこの方法ではなくDeviseモジュールを使用する場合は、Devise ウィキページ

おすすめ記事