0

サインインした後、 Deviseをユーザーの前のページにリダイレクトさせようとすると、大きな問題が発生します。

Wiki のガイドに従おうとしましたが、このコードを実装すると次のようになります。

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                                                                                                                                                    
    request.referer || "/"                                                                                      
  end                                                                                                                                                     
end     

常にルートにリダイレクトされ、前のページにはリダイレクトされません。

同じ問題に関する以前の質問を見つけましたが、それらの解決策はうまくいきませんでした。

次に、それを単純化し、参照 URL のパスだけを取得してユーザーを以前の URL に戻すだけでよいと考えましたが、これで同じエラーが発生します。

def after_sign_in_path_for(resource)
  URI(request.referer).path
end

単純に静的パスを入れればうまくいきます:

def after_sign_in_path_for(resource)
  "/somepath"
end

それは絶対にうまくいきます。ここで明らかな何かが欠けていると確信しています!

4

1 に答える 1

1

この回答を見てください: https://stackoverflow.com/a/3104799/1657142。リンクで説明されているように、request.referer は HTTP ヘッダーに設定された HTTP_REFERER 値を返します。この値が欠落している可能性があります。

于 2012-09-08T19:18:32.620 に答える