1

Rails 3.1アプリにdevise、omniauth、facebook-omniauthを使用しています。認証後、ユーザーを表示中のページにリダイレクトしたいと考えていました。同じために次のコードを使用しました。

def facebook
@user = Spree::User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
flash[:notice] = "Yipee! You were successfully authorized from your Facebook account!!"
sign_in @user, :event => :authentication
redirect_to request.referrer
end

これにより、ユーザーの作成時にのみ次のエラーが発生します。

ActionController::ActionControllerError in Spree::OmniauthCallbacksController#facebook
Cannot redirect to nil!

ユーザーが作成済みの次の場合、ログイン中およびログイン後にエラーは表示されません。

これをどのように修正することをお勧めしますか? ありがとう!

4

1 に答える 1

2

アプリケーションコントローラーでサインイン/サインアップパスの関数を上書きできます:

def after_sign_up_path_for(resource)
  credit_path 
  return request.env['omniauth.origin'] || session[:return_to] 
end 

def after_sign_in_path_for(resource)
  return request.env['omniauth.origin'] || session[:return_to]
end

セッションを使用して、現在のパスを移動先のパスに保存しますsession[:return_to] = request.url

または、パスに移動してその場所を保存すると常に呼び出されるメソッドを作成します。ただし、それを行うときは、巨大なループのリダイレクトに注意してください。

于 2012-06-26T22:34:22.003 に答える