1

我正在为我的 Rails 3.1 应用程序使用设计、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#store current location

或者您创建一个方法,一旦他们进入路径并存储该位置,该方法将始终被调用。但是,当你这样做时要注意一个巨大的循环重定向。

于 2012-06-26T22:34:22.003 回答