2012-04-09 3 views
0

サインインしていないユーザーがURLにヒットした場合、deviseはサインインページにそれらを転送した後、ユーザーを元のページに転送します。サインインビューでこの情報(元のルート/アクション)にアクセスするにはどうすればよいですか?私はユーザーがどこに行くのかに応じてguiを異なって表示したいと思います。サインイン時に元のURLを取得

+0

「[元のタスクへのログイン後のリダイレクト]」の可能な複製(http://stackoverflow.com/questions/5359195/redirecting-after-a-login-to-the-original-task) –

+0

@Jordanこれは重複ではありません。 Deviseはユーザーを適切なWebページに正しく送信します。私はちょうどそのページが何であるかを知りたがっています*。あなたがリンクした質問はこれを求めておらず、答えはそれに対処していません。 – paleozogt

答えて

0

したがって、deviseのセッションコントローラを拡張/上書きする必要があります。とき、このコントローラは、考案者から継承しているので

class SessionsController < Devise::SessionsController 
    def new 
    self.resource = build_resource(nil, :unsafe => true) 
    clean_up_passwords(resource) 
    @after_sign_in_url = after_sign_in_path_for(resource) 
    respond_with(resource, serialize_options(resource)) 
    end 
end 

:これを行うには、hereから最新newアクションコードをコピーして、このような工夫のセッションコントローラから継承するコントローラ(のは、セッションそれを呼びましょう)、それを貼り付けるにはコントローラーでアクションが定義されていないアクションは、Deviseのコントローラーによって処理されます。だから、そのnewアクションを上書きするだけでいいです。あなたはこのように、スコープを使用している場合は、代わりに

# routes.rb 
devise_for :users, :controllers => { :sessions => 'sessions' } 

# routes.rb 
devise_scope :user do 
    get 'login' => 'sessions#new', :as => :new_user_session 
end 

今、あなたのビューで@after_sign_in_urlにアクセスすることができます

最後に、あなたのルートがファイルを編集することはそう、この変更が有効になります!

+0

どこから呼び出すのですか? devfsのnew.html.erbで 'undefined method 'after_sign_in_path_for''を返します – paleozogt

+0

申し訳ありませんが、私はもっと徹底していたはずです。お役に立てれば。 – Ashitaka

+0

オハイオ州。これはもっと意味があります。ありがとう! – paleozogt

関連する問題