2010-07-07 3 views
0

Я использую authlogic с приложением rails для аутентификации. Скоропортящийся токен сбрасывается после того, как пользователь сбрасывает свой пароль. Рассмотрите этот случай. Пользователь регистрируется, он забывает активировать учетную запись, а также забывает пароли. Таким образом, он сбрасывает пароль. В связи с этим его ссылка активации больше не действует. Поэтому он не может активировать свою учетную запись. Когда он пытается войти в систему, он получает сообщение об ошибке, что учетная запись не активирована. Пользователь застревает !.Authlogic: Как найти, не был ли пользователь зарегистрирован, поскольку пользователь не был зарегистрирован в

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

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

С уважением, Панкай

+0

обратите внимание: этот вопрос должен быть: Authlogic: Как найти, если пользователь был не вошли в систему, потому что пользователь ввел неверные учетные данные или потому, что он неактивен. – Pankaj

ответ

2

Вместо проверки для фактической ошибки, я был в состоянии проверить условия, которые вызывают его с помощью @user_session.attempted_record && [email protected]_session.invalid_password? && [email protected]_session.attempted_record.active?

Вот мое полное решение повторной отправки сообщений электронной почты активации (после настройки активации с помощью matthook's tutorial):

# /app/controllers/users_sessions_controler.rb 
def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
    redirect_back_or_default root_path 
    elsif @user_session.attempted_record && 
    [email protected]_session.invalid_password? && 
    [email protected]_session.attempted_record.active? 
    flash[:notice] = render_to_string(:partial => 'user_sessions/not_active.erb', :locals => { :user => @user_session.attempted_record }) 
    redirect_to :action => :new 
    else 
    render :action => :new 
    end 
end 

# /app/views/user_sessions/_not_active.erb 
Sorry, before you can sign in you need to confirm your email address. <%= link_to('Resend confirmation email', resend_activation_users_path(:login => user.login)) %> 

# /app/controllers/users_controller.rb 
def resend_activation 
    if params[:login] 
    @user = User.find_by_login params[:login] 
    if @user && [email protected]? 
     @user.deliver_activation_instructions! 
     flash[:notice] = "Please check your e-mail for your account activation instructions!" 
     redirect_to root_path 
    end 
    end 
end 

# /config/routes.rb 
map.resources :users, :collection => { :resend_activation => :get } 
1

Используйте вашу базу данных для захвата регистрации, активации, сброс и другие детали. Чтобы вы знали, какие действия нужно предпринять.

0

Майк:

Вместо добавления нового фильтра, вы должны пропустить фильтр, который уже есть в вашем application.rb

Способ сделать это:

skip_before_filter :require_user 

Я надеюсь, что это будет полезно для кого-то

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