0

很简单的问题。

我的 rails app/omniauth/facebook 登录时遇到了“电子邮件不能为空”的问题。对此有很多问题,其中一些答案是一些用户提供了他们的电话号码而不是他们的电子邮件地址。但是在我的情况下,我打开了一个 facebook 帐户,其电子邮件地址在开发中与omniauth 配合使用,但是当我在生产中使用它时,它返回的电子邮件不能为空白。我的凭据是正确的。

谁能解释一下你怎么能有这种事件的组合?

编辑:这是我的控制器代码(请记住我的设计模型是“成员”,并且有一个关联的配置文件模型“用户”

def provider
     auth = request.env["omniauth.auth"]
     member_email_check = Member.find_by_email(auth.info.email)
     if member_email_check.present? && User.find_by_member_id(member_email_check.id)
     sign_in_and_redirect member_email_check
     return false
    else
       member = Member.where(provider: auth.provider, uid: auth.uid).first_or_create do |member|
      member.provider = auth.provider
      member.uid = auth.uid
      member.email = auth.info.email
     end
   end

  if auth.provider == "facebook"
    if member.save
       unless User.find_by_member_id(member.id)
           User.create(:member_id => member.id,
                  :full_name => auth.info.first_name + " " + auth.info.last_name,
                  :first_name => auth.info.first_name,
                  :last_name => auth.info.last_name,
                  :email => auth.info.email,
                  :picture => auth.info.image)
           end
         sign_in_and_redirect member
       else
         session["devise.member_attributes"] = member.attributes
         redirect_to new_member_registration_url
       end
     end
   end

   alias_method :facebook, :provider

 end

解决了!

        config.omniauth :facebook, "<YOUR API KEY>", "<YOUR SECRET KEY>", scope: 'email', info_fields: 'email,name,first_name,last_name,gender'

刚刚添加了电子邮件范围和 info_fields。

4

0 回答 0