2010-07-07 4 views
0

J'utilise l'application authlogic avec rails pour l'authentification. Le jeton périssable est réinitialisé après que l'utilisateur a réinitialisé son mot de passe. Considérons ce cas. Un utilisateur s'inscrit, il oublie d'activer le compte et il oublie aussi les mots de passe. Donc, il réinitialise le mot de passe. Pour cette raison, son lien d'activation ne reste plus valide. Donc, il ne peut pas activer son compte. Quand il essaie de se connecter, il reçoit une erreur indiquant que le compte n'est pas activé. L'utilisateur est bloqué !.Authlogic: Comment trouver si un utilisateur n'était pas connecté parce que l'utilisateur n'était pas connecté

Quelle solution j'ai trouvé était de renvoyer le lien d'activation chaque fois que la connexion est empêchée en raison du problème que le compte n'est pas activé.

Maintenant le problème est que j'ai besoin de vérifier quel type d'erreur c'est quand l'utilisateur essaye de se connecter, de sorte que je puisse renvoyer l'email d'activation.

Cordialement, Pankaj

+0

s'il vous plaît noter: le sujet doit être: Authlogic: Comment trouver si n'a pas été enregistré un utilisateur en raison l'utilisateur a été entré des informations d'identification non valides ou parce qu'il n'était pas actif. – Pankaj

Répondre

2

Plutôt que de vérifier l'erreur réelle, j'ai pu vérifier les conditions qui provoquent l'aide @user_session.attempted_record && [email protected]_session.invalid_password? && [email protected]_session.attempted_record.active?

Voici ma solution complète de réémission des e-mails d'activation (après la mise en place d'activation à l'aide 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

Utilisez votre base de données pour capturer l'enregistrement, l'activation, remise à zéro et d'autres détails. Alors que vous savez ce que l'action doit prendre.

0

Mike:

au lieu d'ajouter un nouveau filtre, vous devriez sauter le filtre que vous avez déjà dans votre application.rb

La façon de le faire est:

skip_before_filter :require_user 

J'espère que cela sera utile pour quelqu'un

Questions connexes