我正在尝试在我的应用程序中设置电子邮件验证过程,我会生成一个令牌,并在用户注册时通过电子邮件发送给用户。但是当我点击验证链接时,'users_controller / confirm'操作中的if和else语句都会被执行。我被重定向到root_path但是修改了用户记录中的两个字段。当我从rails控制台运行find_by_token时,它返回预期的用户。我正在使用mysql,我想知道查询中是否存在某种导致两者都执行的延迟。
def confirm
if User.find_by_token(params[:token]).nil?
redirect_to root_path
else
@user = User.find_by_token(params[:token])
cookies[:auth_token] = @user.auth_token
User.skip_callbacks = true
@user.update_attribute(:token, "")
@user.update_attribute(:confirmed, 1)
User.skip_callbacks = false
reset_session
redirect_to routes_path
end
end
答案 0 :(得分:2)
您可以在过滤器之前使用,以便像这样检查和重定向
before_filter :find_user
def confirm
#your action code
end
private
def find_user
@email = User.find_by_token params[:token].to_s
redirect_to root_path, notice: 'Your token is wrong!' if @email.nil?
end
这样,您的操作代码将仅针对有效记录运行。