omniauth-facebook gem:request.env [“omniauth.auth”]为零

omniauth-facebook gem:request.env [“omniauth.auth”]为零

问题描述:

我正在使用omniauth-facebook gemdevise。它一直在努力,直到最近。我最近也从Rails 4升级到了Rails 5.0.1,但我不确定这是什么原因。omniauth-facebook gem:request.env [“omniauth.auth”]为零

我目前有0个用户,我已登录Facebook。但是当我尝试在本地主机上使用Facebook注册我的应用程序时,出现此错误:

NoMethodError in RegistrationsController#facebook 
undefined method `provider' for nil:NilClass 

这是我的用户模型。我标记了错误突出显示的行。

User.rb

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


    def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| #ERROR 
     @data = auth.info 
     user.name = @data.name 
     # ... 
    end 
    end 

RegistrationsController

def facebook 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 
    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication 
     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 

而且,这里是我的链接:

<%= link_to "fb", user_facebook_omniauth_callback_path(:facebook, thing: @thing.id, degree: @degree, :format => :js) %> 

HTML输出:

<a href=\"/auth/facebook/callback.js?thing=2\">fb<\/a> 

和路径:

localhost:3000/auth/facebook/callback.js?thing=2 

所以问题是,request.env["omniauth.auth"]是出于某种原因为零。在任何文档中找不到类似错误的任何痕迹。

以前有没有人遇到过这个或有什么想法?

要通过Facebook所有你需要的验证是把一个链接,从您的网站的Facebook像这样:

www.yoursite.com/auth/facebook 

,然后建立了一个路线从Facebook收到回调与认证哈希:

#routes.rb  
get 'auth/facebook/callback' => 'sessions#create_facebook' 

您可以指定这条线的输出如何看起来像为什么你逝去的其他信息:?

<%= link_to "fb", user_facebook_omniauth_callback_path(:facebook, thing: @thing.id, degree: @degree, :format => :js) %> 

编辑

认证/ Facebook的/回调是一个GET请求。 Facebook在那里向您发送用户身份验证哈希。只有Facebook本身应该使用该路线。当你想验证您的链接必须是:

localhost:3000/auth/facebook 

他们的方式你拥有它,omniauth期待Facebook的身份验证哈希,但收到这会导致失败的认证“的事情= 2?”。 Omniauth试图从“?中提取信息?这是不是一个哈希,当您尝试访问AUTH [商]的事情= 2" ,权威性是空的,所以供应商没有定义任何导致:

undefined method `provider' for nil:NilClass 
+0

去除:omniauthable我说我再培训局链接的HTML输出和路径。其他参数都只是附加的数据添加到注册路径。是否对omniauth Facebook的解决方案运行? –

+0

你有一个错误的链接。 auth/facebook/callback是为Facebook保留的,Facebook发布给你的路由你不会将信息传递给那个路由,我更新了我的答案 –

+0

所以当creatin可以传递额外的参数g与Facebook的新用户? –

我有同样的问题和解决它从用户模型