rails - 用户注册时激活电子邮件

时间:2011-09-26 22:22:07

标签: ruby-on-rails email-validation activation

我希望用户在“激活”之前或在他们可以使用电子邮件/密码登录之前单击激活链接。

我没有使用宝石,并希望保持这种方式。我的问题是,在用户注册后,他们可以登录而无需点击激活码。我有一个confirm_token行和一个确认的模型行。

用户控制器:

def create
  @user = User.new(params[:user])
 if @user.save
  render "root_path"
 else
  render "new"
 end
end

def confirmed
 user = User.find(:first, :conditions => {:confirmation_token => params[:confirmation_token]})
 if (!params[:confirmation_token].blank?) && user && !user.confirmed?
  user.confirmed!
  self.current_user = user
  flash[:notice] = "Thank you.  You account is now activated."
  redirect_to account_preference_path(current_user)
 else
  flash[:notice] = "Sorry we don't have your email in our database."
  redirect_to root_path
 end

用户模型:

def confirmed!
 self.confirmed = true
 self.confirmation_token = nil
 save(false) 
end

我错过了什么吗?谢谢!

我知道那里有诸如设计,认证逻辑等宝石,但我想学习如何从头开始编写它。感谢。

编辑:

会话控制器

def create
 user = User.authenticate(params[:email], params[:password])
 if user && user.confirmed == true
  cookies.permanent.signed[:remember_token]
  redirect_to account_path(user.id), :notice => "Welcome, #{user.first_name}"
 else
  flash.now.alert = "Invalid email or password."
  render "new"
 end
end

2 个答案:

答案 0 :(得分:2)

当然,经过多次考验和磨难后,我想通了。在此之前,我将路由重定向到新的控制器,在那里他们可以编辑密码,而不是仅将它们发送到刚确认代码的路由。愚蠢的错误让我头疼不已,但生活和学习。谢谢所有关注它的人。

答案 1 :(得分:0)

您可能希望搜索一些教程以至少指导您完成整个过程,您可以更好地正确编码rails。

基本上你的问题是你没有检查用户是否在登录时被确认。一种方法是在会话创建方法中添加它。

if user && user.confirmed? 

尽管最好的解决方案可能是使用像这样的过滤器

 before_filter :authenticate, :only => [:new, :create, :edit, :destroy]

然后你有一个authenticate方法检查当前用户,然后有逻辑说明current_user只能是一个确认的用户。这将检查用户是否在他们需要的所有页面上有效,而不是仅在登录时。

相关问题