使用ActionMailer通过电子邮件注册确认

时间:2014-02-02 02:20:55

标签: ruby-on-rails ruby token actionmailer email-validation

目前我有ActionMailer在用户注册时发送电子邮件,并且我与用户生成随机:sign_in_token。

用户如何点击发送到他的电子邮件的链接并更新用户:registration_complete布尔值为TRUE?

目前,我可以发送链接并生成随机令牌,但我不知道如何通过电子邮件更新布尔值。

模型

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :sign_in_token, 
              :registration_complete

  ###This generates my sign_in_token
  def generate_sign_in_token
    self.sign_in_token = Digest::SHA1.hexdigest([Time.now, rand].join)
  end

end

CONTROLLER

def create
  @user = RegularUser.new(params[:regular_user])
  if @user.save      

    ###Sends the User an email with sign_in_token
    UserMailer.registration_confirmation(@user, login_url+"/#{@user.sign_in_token}").deliver

    flash[:success] = "Please Check Your Email to Verify your Registration!"
    redirect_to (verifyemail_path)
  else
    render 'new'
  end
end

user_mailer文件

def registration_confirmation(user, login_url)
  @login_url = login_url
  @user = user
  mail(:to => "#{user.name} <#{user.email}>", :subject => "Welcome to APP")
end

视图

###Redirects User to Login Page, But how do i connect it to my activate method?
<%= link_to "Complete Registration", @login_url %>

路线

match '/login/:sign_in_token', :to => 'sessions#new'

1 个答案:

答案 0 :(得分:2)

当他们点击一个链接时,它会使用GET请求将操作带到set_complete的控制器,该请求设置布尔值。

类似的东西:

def set_complete
user = User.find(params[:user])
user.update_attribute(registration_complete => true)
redirect_to login_path # or whatever your login url is...

end

对于控制器操作和类似的链接:

<a href="example.com/registrations/set_complete?user=1" />

以下是路线文件中可能包含的内容示例:

get "/users/set_complete", :to => "users#set_complete"

您可能需要使用erb将用户ID设置为您想要的任何内容,并进行一些其他应用程序特定的自定义,但这是一般的想法。

希望这有帮助!

相关问题