这是在2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报道的,Facebook 于12月17日回复说该错误早已得到修复.
我用我的Facebook帐户重新测试了这个(我还没有验证电子邮件地址),使用Grap API Explorer工具时,无法使用Graph API或使用FQL查询获取此帐户的电子邮件地址.
结论:使用Graph API或FQL查询从Facebook获得的电子邮件地址是经过验证的电子邮件.如果某个帐户尚未验证其电子邮件,则无法获得该帐户.
我正在制作一个带有SSO的网络应用程序,用户可以通过Google或Facebook登录.我希望拥有这两种类型帐户的用户在我的系统中显示为同一用户,无论他们使用哪种身份登录.为了实现这一点,我正在考虑使用电子邮件地址作为标识符来了解我是否应该创建一个新帐户或者用户是否已经存在.
为了不引入任何安全问题,我必须知道电子邮件地址已经过验证,并且实际上属于用户.对于Google,userinfo API可以告诉我电子邮件是否已经过验证,因此这里没有问题.但我在Facebook Graph API中找不到这样的东西.
是否有可能知道Facebook上是否确认了电子邮件地址?
我知道有一个verified字段,但这只会告诉帐户是否经过验证而不是电子邮件地址.
起初看起来您只能将图谱API用于已确认电子邮件地址的帐户.如果地址未得到确认,我只是在收到错误时告诉我必须先确认电子邮件地址才能登录任何第三方网站.
然而,对于所有帐户而言,这似乎并非如此.在某些情况下,即使您没有确认的电子邮件地址,也可以访问Facebook的所有部分.例如,当您使用@ myopera.com邮件地址注册时.
当您使用@ myopera.com电子邮件地址注册Facebook时,您会收到一条消息,表明您的帐户在提交注册表单后已暂时锁定.要继续,您需要提供您的电话号码以验证您的帐户并"保持Facebook安全且免受垃圾邮件"(对于屏幕截图中的瑞典语,这是在我进入Facebook并将语言更改为英语之前):
当您提供电话号码时,您已登录,Facebook不会再唠叨您必须验证您的电子邮件地址.
您可以在设置页面上看到尚未验证您的电子邮件地址的唯一位置:

在您验证电子邮件地址之前通常无法访问的移动设置可用,并列出注册期间输入的电话号码:

除此之外,还可以使用未经证实的电子邮件地址登录第三方站点:

当我使用此用户连接到图形API时,我可以获得未经证实的电子邮件地址,并且该verified字段按预期返回true,因为我已通过添加电话号码验证了帐户.显然我不相信我从Facebook获得的电子邮件地址真的属于拥有Facebook帐户的用户.
有没有其他方法可以知道电子邮件地址是否经过验证,或者如果我想用它来识别用户,我是否必须自己验证?
security facebook single-sign-on facebook-graph-api facebook-authentication
在测试django-allauth时,如果我使用不同的社交帐户登录并注销,它们似乎没有链接在一起(因为我无法通过查看socialaccount_set.all.0,socialaccount_set.all.1等来访问它们) ).
有人可以解释如何将社交帐户链接在一起吗?
我确实看到了这篇文章:如何使用django-allauth将多个社交身份验证提供程序连接到同一个django用户?这似乎使用户有责任首先使用一个社交帐户登录,然后为自己链接其他帐户.
当然应该有一种方法可以做到这一点,而不是将责任推给用户?也许通过电子邮件地址
有没有办法在现有用户之后执行此操作?
我有一个自定义用户模型,我正在使用django-allauth进行社交注册和登录.当用户使用已经使用电子邮件注册的社交帐户登录时,我正在尝试将现有用户连接到新的社交帐户.我找到了这个链接.
def pre_social_login(self, request, sociallogin):
user = sociallogin.account.user
if user.id:
return
try:
customer = Customer.objects.get(email=user.email)
except Customer.DoesNotExist:
pass
else:
perform_login(request, customer, 'none')
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过社交帐户登录时,我收到了错误消息.
RelatedObjectDoesNotExist at /accounts/facebook/login/callback/
SocialAccount has no user.
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我也知道这方面的安全问题.但我仍然想尝试这个.
我使用 django-allauth 和 django-rest-auth 实现了注册和登录。我可以使用allauth 和rest-auth(网络和移动设备)成功使用Facebook 登录服务器。
当我尝试使用 FB 帐户登录时,其电子邮件已存在(有人已使用该电子邮件注册),它会显示注册表单。但是,当我尝试使用 Rest-auth 执行相同操作时,出现错误:
Internal Server Error: /rest-auth/facebook/
IntegrityError at /rest-auth/facebook/
duplicate key value violates unique constraint "auth_user_username_key"
DETAIL: Key (username)=() already exists.
Run Code Online (Sandbox Code Playgroud)
我的配置:
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'optional'
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_VERIFICATION = False
SOCIALACCOUNT_EMAIL_REQUIRED = True
SOCIALACCOUNT_QUERY_EMAIL = True
Run Code Online (Sandbox Code Playgroud) django facebook-login django-rest-framework django-allauth django-rest-auth