has_secure_passwordin railsは、データベースのフィールドをチェック:passwordして:password_confirmationからログに記録することにより、ユーザーのサインアップに適しています。:password_digestただし、メールアドレスを確認できるようにしたい場合 (確認メールを送信することによって)、レールでこれを行うにはどうすればよいでしょうか?
3 に答える
通常、電子メール アドレスを確認するには、関連する電子メール アドレスに (リンク付きで) 電子メールを送信し、ユーザーはリンクをクリックして確認します。通常、リンクには、その電子メール アドレスを一意に識別するために使用されるトークンが含まれています。したがって、verification_tokenフィールドをモデルに追加できます。また、コントローラー アクションを追跡して使用するために、verification_email_sent_atおよびverified_atフィールドも追加できます。
def verify_email
@user = User.find_by_verification_token(params[:verification_token])
@ユーザーの場合
@user.verification_token = nil
@user.verification_email_sent_at = nil
@user.verified_at = Time.now
@user.save
# 上記の行は、@user.verify のようなメソッドの一部にすることができます!
redirect_to "/"
そうしないと
...
終わり
終わり
また、認証ソリューションを構築する代わりに、以下をご覧になることを強くお勧めします
https://github.com/plataformatec/devise
使い方はとても簡単です。
Rishav Rastogiの応答に追加するには、適切なチェックを追加して、検証パラメーターがサニタイズされ、null でないことを確認してください (または、null 検証トークンを渡す誰かが、そのverification_token列のユーザーのアカウントにアクセスできるようになります)。無効です。
verified_at安全なチェックで列を利用することも当然です。
(評判が悪いため、彼の答えについてコメントすることはできません)
これはかなり大きな質問であり、それがと関係があるかどうかはわかりませんhas_secure_password。要点は、たとえば、ユーザーモデルにフィールドが必要でconfirmedあり、確認メールを送信するメーラーを作成することです。このメールには、ユーザーを確認済みとしてマークするコントローラーへのリンクが含まれています。
開始するには、をチェックすることをお勧めしますActionMailer guide。