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'

相关问题