3

繼創業板教程剛好我似乎仍然遇到了一些問題。我首先點擊鏈接通過Facebook註冊並重定向到Facebook。我點擊好,並返回到我的註冊頁面。沒有新用戶被創建。如果我嘗試再次點擊註冊鏈接,只需在地址欄http://localhost:3000/register#_=_中刷新頁面。我究竟做錯了什麼?Omniauth Facebook重定向到註冊屏幕而不是創建用戶

用戶模型

devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable, omniauth_providers: [:facebook] 

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    user.first_name = auth.info.first_name 
    user.last_name = auth.info.last_name 
    end 
end 

回調控制器

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
     session["devise.facebook_data"] = request.env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
    end 
end 

控制檯代碼

Started GET "/auth/facebook/callback?code=AQCh2rckn0dMOKNggTQJEbx_LTMGjNrDdumTu_Ay9Cwr_87A2pro_gOgFtSa866DouLuj4kMLVMMPfR3amp_X6rNSlAwOQ51RXK053vxhtEyJNY8StcqiOVZ6YqpGmfg8Zsz8RIXQr2xRclPmW9j9o8fqg83CoFiH1j-e_YOOuyCaX6xkoVN1eC3kjWSezg_WFm3p6aXu_XYxw1-Jf2j3Ijqt4kR4ySLHfmauj1z9UUcy5HANMIjaRx84NiZHNdJq6fzuAT37y9cXvP5HawonBBA0bG7ejAk5AATBYJj-kTXdCR9673cQ55O4GbAw_LCzzy7_YgHkFR9S038tP68HnXm&state=d013067bc67bd4bff43b6ac77bea69f5b113858cb234452a" for ::1 at 2015-07-12 19:28:55 -0400 
I, [2015-07-12T19:28:55.026584 #7266] INFO -- omniauth: (facebook) Callback phase initiated. 
Processing by Users::OmniauthCallbacksController#facebook as HTML 
    Parameters: {"code"=>"AQCh2rckn0dMOKNggTQJEbx_LTMGjNrDdumTu_Ay9Cwr_87A2pro_gOgFtSa866DouLuj4kMLVMMPfR3amp_X6rNSlAwOQ51RXK053vxhtEyJNY8StcqiOVZ6YqpGmfg8Zsz8RIXQr2xRclPmW9j9o8fqg83CoFiH1j-e_YOOuyCaX6xkoVN1eC3kjWSezg_WFm3p6aXu_XYxw1-Jf2j3Ijqt4kR4ySLHfmauj1z9UUcy5HANMIjaRx84NiZHNdJq6fzuAT37y9cXvP5HawonBBA0bG7ejAk5AATBYJj-kTXdCR9673cQ55O4GbAw_LCzzy7_YgHkFR9S038tP68HnXm", "state"=>"d013067bc67bd4bff43b6ac77bea69f5b113858cb234452a"} 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."provider" = ? AND "users"."uid" = ? ORDER BY "users"."id" ASC LIMIT 1 [["provider", "facebook"], ["uid", "836028396465704"]] 
    (0.1ms) begin transaction 
    (0.0ms) rollback transaction 
Redirected to http://localhost:3000/register 
Completed 302 Found in 59ms (ActiveRecord: 0.2ms) 
+0

確保您使用了正確的密鑰。 – Pavan

+0

正在使用正確的密鑰,但仍然得到重定向。這一整天都在調試,沒有運氣讓它工作。 –

回答

4

此行添加到配置/初始化/ devise.rb

config.omniauth :facebook, "app id", "app secret", scope: 'email', info_fields: 'email' 

有Facebook的API新版本的變化, Introducing Graph API v2.4

獲得更快的性能

較少默認域:爲了幫助改善移動網絡連接性能,我們已經減少了默認情況下API返回的字段數量。您現在應該使用?fields = field1,field2語法來聲明您希望API返回的所有字段。

+0

當你引用時,'email'是它的真實值還是與應用程序關聯的實際電子郵件? –

+0

它是字面值。 –

+0

無論哪種方式,它沒有工作。 –

0

如果您正在關注devise的wiki頁面,那麼認證失敗。在tge控制器中,如果認證失敗,它將重定向到註冊路徑。 就像穆罕默德說,但你現在應該添加first_name和姓氏到你的info_fields 所以在配置/初始化/ devise.rb寫這 config.omniauth:Facebook,「應用程序ID」,「應用程序的祕密」,範圍:'電子郵件' ,info_fields:'email,first_name,last_name'

相關問題