更新:此问题已得到解答(见下文)。如果有人能在将来受益,我会留下它。
我正在尝试使用Rails 3获取使用Authlogic的电子邮件确认。http://github.com/matthooks/authlogic-activation-tutorial
身份验证正在运行,并且正在生成和发送激活电子邮件,每个都包含易腐令牌,但易腐坏的令牌不正确,因为它们与用户保存的不匹配记录。
在电子邮件中跟踪令牌后,我得到:ActivationsController中的异常#create
注意:当我从表中手动输入正确的令牌到URL时,它会按预期验证和重定向。因此,唯一的问题是生成的易腐令牌与正在保存的令牌不同。
# UserMailer
class UserMailer < ActionMailer::Base
default :from => "notifications@myapp.com"
def registration_confirmation(user)
@user = user
mail(:to => "#{user.login} <#{user.email}>", :subject => "Registered")
end
def activation_instructions(user)
subject "Activate Your Account"
from "noreply@myapp.com"
recipients user.email
sent_on Time.now
body :account_activation_url => activate_url(user.perishable_token)
end
def welcome(user)
subject "Welcome to the site!"
from "noreply@myapp.com"
recipients user.email
sent_on Time.now
body :root_url => root_url
end
end
# E-mail itself:
To activate, click here: <%= @account_activation_url %>
错误发生在第5行,系统尝试并且无法通过令牌找到User:
class ActivationsController < ApplicationController
before_filter :require_no_user
def create
@user = User.find_by_perishable_token(params[:activation_code], 1.week) || (raise Exception)
raise Exception if @user.active?
if @user.activate!
flash[:notice] = "Your account has been activated!"
UserSession.create(@user, false) # Log user in manually
@user.deliver_welcome!
redirect_to home_url
else
render :controller => "welcome", :action => "linklogin"
end
end
end
答案 0 :(得分:0)
这很有趣 - 有时问问题本身的过程会揭示答案。
在我的用户#create中,有不同的用户类型,操作在初始验证的保存后设置了几个值,并在没有验证的情况下再次保存简单更改。
我的电子邮件是在第一次和第二次保存之间发送的,因此当用户点击激活电子邮件时,perishable_token已经被重置。
我将邮件发送到第二次保存之后,现在激活电子邮件工作正常。
非常感谢你花时间考虑这个问题。 :) Cirrus的