1

我一直在使用https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview得到Facebook身份驗證工作。我做了它告訴我要做的所有事情,但它仍然不起作用。我有一個Cookie溢出錯誤開始,所以做了一些谷歌搜索後,我在omniauth_callbacks_controller.rb除(「額外」)添加像下面Facebook身份驗證與Devise + OmniAuth-Facebook沒有做任何事情

session["devise.facebook_data"] = request.env["omniauth.auth"].except('extra') 

這擺脫了錯誤,但它仍然無法登錄用戶英寸其實,我甚至不認爲它創建用戶(與英雄導軌c檢查)。

它給了我一個URL,其後面附有「sign_up#=」。可能是什麼問題?

user = User.create(name:auth.extra.raw_info.name, 
         provider:auth.provider, 
         uid:auth.uid, 
         email:auth.info.email, 
         username:auth.info.email, 
         password:Devise.friendly_token[0,20] 

         ) 

我補充說:「用戶名」,因爲我在用戶模型中使用,但我似乎無法想別的,我可能需要編輯/添加。

Rails的3.1.3,紅寶石1.9.3p194(2012-04-20的修訂35410)[x86_64的-darwin11.4.1]

===============快速更新===========================

所以它看起來像我得到了用戶保存 - 我可以在數據庫中看到它。但是,它仍然不會登錄用戶,並且我無法使用該創建的用戶登錄,因爲我只知道用戶名和電子郵件地址,而不知道密碼。總之,我得到了Facebook給我的信息,我能夠將它保存到數據庫,但不能重定向到登錄屏幕。

回答

1

好吧,我明白了這一點。

首先,我不得不添加在用戶模型作爲attr_accessible的「提供者」和「UID」(生成過程的遷移後),像這樣:

attr_accessible :password, :password_confirmation, :remember_me, :username, :email, 
:bio, :website_blog, :company, :name, :image, :provider, :uid 

然後,在ApplicationController中.rb,我不得不調整after_sign_in_path_for(resource)方法。我正在使用Devise,但前一段時間我更改了它,以便在登錄後將用戶重定向到上一頁,但是現在我想現在讓Facebook參與其中,導致了錯誤。所以我不得不評論以前的東西,只使用root_url,我能夠登錄用戶並重定向到主頁。

def after_sign_in_path_for(resource)  
sign_in_url = root_url 
#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 

現在我只需要弄清楚如何將用戶重定向到上一頁而不會導致錯誤,並且它會是完美的。