在使用 Passport-Facebook 进行身份验证时,您可能会发现对于某些 Facebook 帐户,无法获取其电子邮件地址。这通常是因为 Facebook 用户没有授权将其电子邮件地址公开给第三方应用程序。本文介绍了此问题的原因以及如何解决它。
问题分析
当用户使用 Facebook 登录应用程序时,Passport-Facebook 策略会向 Facebook 发送一个请求来获取用户的公开资料,包括姓名、电子邮件地址和其他详细信息。然而,并非所有 Facebook 用户都愿意授权让第三方应用程序访问他们的电子邮件地址。因此,如果用户在 Facebook 上未公开其电子邮件地址,则 Passport-Facebook 将无法为该用户提供电子邮件地址。
解决方案
要解决此问题,可以更改 Passport-Facebook 的配置,以便在未获得用户电子邮件地址时不导致身份验证失败。这可以通过添加 profileFields
选项来完成,如下所示:
---------------- ------------------ --------- ---------------- ------------- -------------------- ------------ ----------------------------------------------- -------------- ------ -------------- --------- -------- -- --------------------- ------------- -------- ----- - -- --- - ---
如上所示,将 profileFields
选项设置为一个包含 'email'
的数组,即使用户未公开其电子邮件地址,Passport-Facebook 也不会因为缺少电子邮件地址而失败。在这种情况下,Passport-Facebook 将返回一个带有用户 ID、姓名和照片的简化版本的用户资料。
如果您需要获取用户电子邮件地址,则可以通过请求 Facebook 用户的电子邮件权限来获得。方法是在调用 passport.authenticate()
时添加 scope
选项,如下所示:
------------------------- --------------------------------- - ------ --------- ----
添加 scope
选项后,当用户进行身份验证并授权第三方应用程序访问其电子邮件地址时,Passport-Facebook 将能够获取用户的电子邮件地址。
总结
在 Passport-Facebook 身份验证中,某些 Facebook 帐户可能无法提供电子邮件地址。这通常是因为用户没有授权让第三方应用程序访问其电子邮件地址。要解决此问题,可以更改 Passport-Facebook 的配置,以便在未获得用户电子邮件地址时不导致身份验证失败。如果需要获取用户的电子邮件地址,则应请求 Facebook 用户的电子邮件权限。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27552