2012-06-26 58 views
1

我正在使用設計,omniauth & facebook-omniauth爲我的Rails 3.1應用程序。驗證後,我想將用戶重定向到正在查看的頁面。我用下面的代碼是一樣的:Devise + 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! 

以下時間用戶已經被創建時,沒有在登錄後&期間顯示錯誤。

您如何解決此問題?謝謝!

回答

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電流位置

或者您創建一個方法,只要它們轉到路徑並存儲該位置,它就會始終被調用。當你這樣做時,注意巨大的循環重定向。

+1

謝謝!這真的幫助了我,我只是稍微改變了我的想法,以符合您的建議和工作原理: redirect_to request.referrer || request.env ['omniauth.origin'] –

相關問題