2010-10-11 3 views
0

Обновление: на этот вопрос был дан ответ (см. Ниже). Я оставлю это на случай, если кто-то сможет выиграть в будущем.Authlogic отправляет неправильный код активации


Я пытаюсь получить по электронной почте подтверждение работы над Authlogic с помощью Rails 3. http://github.com/matthooks/authlogic-activation-tutorial

аутентификация работает и активация электронная почта генерируется и отправлена, каждый из которых содержит скоропортящийся маркер, но скоропортящиеся жетоны неверны, так как они не совпадают с сохраненными в записи пользователя.

При следующем токен в электронной почте, я получаю: Исключение в ActivationsController # создать

Примечание: Когда я вручную ввести правильный маркер из таблицы в URL, он проверяет и перенаправляет как предполагается к. Поэтому единственная проблема заключается в том, что генерируемый скоропортящийся токен не совпадает с тем, который сохраняется.

# UserMailer 
class UserMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def registration_confirmation(user) 
    @user = user 
    mail(:to => "#{user.login} <#{user.email}>", :subject => "Registered") 
    end 

    def activation_instructions(user) 
    subject  "Activate Your Account" 
    from   "[email protected]" 
    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   "[email protected]" 
    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, где система пытается и не может найти пользователя по лексема:

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

Это забавно - иногда процесс задает вопрос сам раскрывает ответ.

В моих пользователях # create, существуют разные типы пользователей, а действие устанавливает пару значений после первоначального подтвержденного сохранения и сохраняет простые изменения снова без проверки.

Мое электронное письмо отправляется между первым и вторым сейвами, поэтому, конечно, к моменту, когда пользователь нажимает на активирующее сообщение электронной почты, perishable_token уже сброшен.

Я переместил рассылку вниз после второго сохранения, и теперь электронная почта активации работает отлично.

Большое спасибо за любое время, потраченное на эту проблему.) Cirrus

Смежные вопросы