2011-01-11 9 views
2

人。私はauthlogicログインの検証を行う際に問題があります。私は正しいパスワードでログインすると、アクティブであると偽って "あなたが中断されています、あなたの管理に連絡してください"のようなメッセージをポップアップさせる、ユーザモデル内の魔法の "アクティブ"フィールドを持っています(I18nファイル);間違ったパスワードでログインすると、not_activeメッセージとpassword_invalidのような "password invalid"というメッセージがポップアップします。私はauthlogicが "アクティブ"フィールドとパスワードの両方の検証を行い、パスワード検証が最初に行われるようだからだと思います。Authlogic検証オーダー

私の質問は、「アクティブ」が偽である場合、パスワードの検証をバイパスする方法です。または、not_activeメッセージのみを表示できますか?私のコードは次のように:

if @user_session.save 
    redirect_to home_path 
else 
    render :json => {:success => false, :error => @user_session.errors.full_messages.join("\n")} 
end 
+0

私はあなたが最初にパスワードを確認してからアクティブにするべきだと思います。 –

+0

@喜び:しかし、私はアクティブでない場合、パスワード検証を迂回したいと思います。私はちょうどnot_activeメッセージを表示したいのは、ユーザが入力されたパスワードの正否を問わず、password_invalidメッセージなしで、ユーザが非アクティブである場合です。 –

答えて

1

OK、私は、ユーザー体験としてこれを好きではないが、あなたは本当に、のような何かをしたい場合:

before_filter :restrict_inactive_users, :on=>:create 

def restrict_inactive_users 
    @user = User.find_by_login(params[:user_session][:login]) rescue nil 
    return unless @user 
    unless @user.active? 
    flash[:error] = "You are suspended, please contact your administration" 
    render :action=>:new 
    return false 
    end 
end 

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
    redirect_to home_path 
    else 
    render :json => {:success => false, :error => @user_session.errors.full_messages.join("\n")} 
    end 
end 
+0

ありがとう、Jesse、このソリューションは理解しやすいです:) –

0

今日の私は解決策を考えましたこれはパスワード検証をバイパスするのではなく、user_sessionからパスワードエラーメッセージを削除するだけです。コードのように:

if @user_session.save 
    redirect_to home_path 
else 
    @user_session.errors.delete(:password) unless @user_session.attempted_record.active 
    render :json => {:success => false, :error => @user_session.errors.full_messages.join("\n")} 
end 
0

電子メールまたはユーザー名のように、選択した識別子でユーザーを取得することから始めます。 ユーザーがアクティブでない場合、ログインページにリダイレクトする前に、他のエラーを削除することができます。

 @user_session.errors.clear 

次に、ページが再レンダリングされるときにエラーは表示されません。しかし、たとえば、flash.now[:error]やjsonレスポンスなどのカスタムエラーメッセージを提供する必要があります。

関連する問題