2011-03-03 5 views
2

から私はsession[:user.return_to]を使用しようとしているが、成功しません...セッション使用方法[を:user.return_to]工夫

マイコード:

def after_sign_in_path_for(resource) 
    (session[:"user.return_to"].nil?) ? "/" : session[:"user.return_to"].to_s 
end 

だから、問題がある:とき私はセッション変数をチェックしますが、私はそれらの名前を持っていません。

ログインページにリダイレクトされる直前に、私が作業していたページに行きたいと思います。

+0

あなたが 'session [:" user.return_to "]'を使用している理由は何ですか? 'session [:return_to]'はDeviseのドキュメントに書かれているものです。 – sorens

+0

[手動でreturn_to with deviseを設定する]の複製が可能です(http://stackoverflow.com/questions/5957714/manually-setting-return-to-with-devise) –

答えて

3

同じ問題を抱えています。声明は、サインインに戻されるからユーザーを防ぐか、ページをサインアウトしない限り、私は私のapplication_controller.rb

before_filter :set_page # at the top and then 

    protected 
    def set_page 
    unless request.referer.include?('/users/sign') 
     session[:return_to] = request.referer 
    end 
    end 

ザ・で...これまでのところのような

をまあまあのソリューションを持っています。私はここにURLがハードコードされているのが好きではないので、もっと良い解決策を見たいと思っています。また、before_filterはログインページにリダイレクトされたページでは起こりませんので、サインインが必要なものをクリックするとサインインした後、実際のリンクではなくリンクをクリックしたページに戻ります自体。

0

リダイレクトする前にセッション変数を定義する必要があります。

session[:url_back] = "/*** 
2

に役立つ可能性があります。

新しいバージョンのDevise(私は2.1.2になっています)にコントローラにbefore_filter :authenticate_user!を追加すると自動的にこの動作が設定されます。

これを手動で設定する場合は、1つの方法は、パスをsessionに設定することです。 Deviseはsession["#{resource}_return_to"]にそれを見つけようとします。ここで、 'resource'はユーザーモデルの名前です。だから通常はsession["user_return_to"]です。あなたには期間がありました。あなたのバージョンでは、あなたのエラーを引き起こしていた可能性があります。また、sessionはキーの文字列値を受け入れますので、それを象徴化しようとする必要はありません。

もう1つの方法は、やっていたとおりにafter_sign_in_path_for(resource)メソッドを上書きすることです。 devise wiki How To: Redirect back to current page after sign inでこれを行う方法の詳細があります。

最後に、リダイレクトが発行されるため、フルURLの使用を検討することをおすすめします。

あなたApplicationController.rbで
def after_sign_in_path_for(resource) 
    session["#{resource}_return_to"] || root_url 
end 
0

def after_sign_in_path_for(resource) 
    sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http') 
    if request.referer == sign_in_url 
    super 
    else 
    stored_location_for(resource) || request.referer || root_path 
    end 
end 

stored_location_for(リソース)ユーザから来れた位置を記憶考案からビルトイン方式です。