1

私はrails3アプリケーションに取り組んでいます。私のアプリケーションでは、ユーザーが初めて登録したときに、確認リンクを含む電子メールがユーザーに送信されました。そのリンクをクリックした後、status_id を更新し、ユーザーをログイン ページにリダイレクトします。これが私のコードです:

トークン生成のコード:

require 'digest/sha2'
class Subscription < ActiveRecord::Base


  validate :ids_must_be_present, :on => :create 

 def ids_must_be_present
    if status_id==0 
      generate_token
    else
      errors.add('Something gone wrong')
    end
  end

  def generate_token
    self.token = encrypt_string(id, generate_salt)
  end

  def encrypt_string(id, salt)
    Digest::SHA2.hexdigest(id.to_s + "prftnxt" + salt)
  end



  private

  def generate_salt
    self.object_id.to_s + rand.to_s + company_id.to_s  + Time.now.to_i.to_s
  end
end  

リンク付きのメールを送信するコード:

def email_verify
   if subscription = Subscription.find_by_id_and_token(params[:id], params[:token])
      subscription.update_attribute(:status_id, 1)
      redirect_to("/login/index", :notice => "Thanks, email successfully verified")
   else
     flash.now[:notice] = "Your email has not verified yet. Please verify your email by clicking the link we have sent you."
   end
  end

確認リンク付きの電子メール テンプレート:

Hello <b><%= @user.username %></b>,
<br/>
<br/>
Thank you for signing up .
<b> Please Verify your email</b>

    <%= link_to "verify", "http://localhost:3000/login/email_verify?token=#{@subscription.token}&id=#{@subscription.id}"%>

</br></br>
</br>

これですべて問題ありません。ユーザーが確認メールを受け取っていない場合、クライアントは確認メールの再送信を要求するオプションまたはリンクを提供します。

ログイン試行時にフラッシュメッセージを表示して、電子メールをリクエストするためのリンクを表示することを考えています。しかし、私はこれをどのように行うべきか混乱しています.

4

1 に答える 1

1

こんにちは、私は解決策を得ました。ログイン コントローラーで、電子メールが検証されているかどうかを確認するメソッドを使用しました。検証されていない場合は、フラッシュ メッセージが表示されます。メッセージにはリンクが含まれています。ユーザーがそのリンクをクリックすると、確認メールが再送信されます。これが私のコードです:

subscription = Subscription.find_by_company_id_and_plan_id(current_company.id, current_company.plan.id)
      link = "<a href= '/login/resend_verification_email'>Click</a>"
      if subscription.status_id == 0
         flash[:error] = "Your email is not verified. Please verify before login. <br/> #{link} here to resend verification email.".html_safe 
         redirect_to :back
      end

およびログインコントローラーで:

def resend_verification_email
    subscription = Subscription.find_by_company_id_and_plan_id(current_company.id, current_company.plan.id)
    Email.verify_email(current_user, subscription).deliver
    redirect_to :back
    flash[:success] = 'Verification email has been resend successfully, please check your inbox.' 
  end
于 2012-08-25T08:23:13.160 に答える