Authlogic发送错误的激活码

时间:2010-10-11 04:47:56

标签: ruby-on-rails ruby-on-rails-3 authlogic

更新:此问题已得到解答(见下文)。如果有人能在将来受益,我会留下它。


我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

这很有趣 - 有时问问题本身的过程会揭示答案。

在我的用户#create中,有不同的用户类型,操作在初始验证的保存后设置了几个值,并在没有验证的情况下再次保存简单更改。

我的电子邮件是在第一次和第二次保存之间发送的,因此当用户点击激活电子邮件时,perishable_token已经被重置。

我将邮件发送到第二次保存之后,现在激活电子邮件工作正常。

非常感谢你花时间考虑这个问题。 :) Cirrus的