2012-03-23 27 views
0

私はDeviseのコントローラヘルパーメソッドsigned_inを使用しようとしていますか?ユーザーがすでにサインインしているかどうかを確認し、そうであれば特定のページにリダイレクトします。カスタムセッションコントローラのサインインチェックインの追加方法を教えてください。

私はこれを試しましたが、signed_in?メソッドは常にtrueを返します。どうすればこの作業を行うことができますか?

class SessionsController < Devise::SessionsController 
    def new 
    redirect_to root_url 
    end 

    def create 
    if signed_in?(resource_name) 
     redirect_to where_-_want_to_url 
    else 
     resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure") 

     return sign_in_and_redirect(resource_name, resource) 
    end 
    end 

    def sign_in_and_redirect(resource_or_scope, resource=nil) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    resource ||= resource_or_scope 
    sign_in(scope, resource) unless warden.user(scope) == resource 
    return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)} 
    end 

    def failure  
    return render :json => { :success => false } 
    end 

end 
+0

これは何のために使いますか?ユーザーがログインしているかどうかに応じて、別の**ホームページ**を表示したいだけですか? – Ashitaka

+0

いいえ、ログインページが表示されているが、実際には既にログインしているという状況があるので、服装のリダイレクトをしたい – Rn2dy

答えて

0

あなたはヘルパーに住みたいと思っています。

編集

http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:current_userマイケル・ハートルから

def signed_in? 
    !current_user.nil? 
end 

を使用することができ、ユーザのサインイン、ユーザーがあなたに署名されているかどうかを確認するにはCURRENT_USER

self.current_user = user 

としてユーザーを保存するに:

申し訳ありません、私はちょうど編集を読む。あなたはDevise'sを望んでいた。

どのようにdef 'signed_in?'外見は?

最初の実装では、わかりやすくするために独自の方法を使用し、すべてのコンポーネントが高速カスタマイズのためにどこにあるのかを知ることをお勧めします。次のロールで他のメソッドを実装できます。

0

は、あなたが今if user_signed_in?

を試してみましたが、私は本当にあなたが達成しようとしているのかわからないんだけど、私は、コントローラでそのように私のルーティングを定義しないでしょう。私は次のようなことをします:

# config/routes.rb 
authenticated :user do 
    root :to => where_I_want_to_url 
end 
root :to => 'welcome#index' 
関連する問題