很简单的问题。
我的 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。