繁体   English   中英

我无法从我网站上的Facebook登录名获取电子邮件范围

[英]I can't get the email scope from facebook login on my website to work

我用了这段代码 我填写了所有内容,ID,Secret,回调URL和本地数据库。

我在我的Facebook应用程序上将URL设置为“ http:// localhost:3000 / ”,并为网站的URL尝试了“ http:// localhost:3000 / ”和“ http:// localhost:3000 / auth” / facebook / callback

我也将应用程序上的端口从8080更改为3000。

每当我单击登录名时,服务器就会崩溃,并告诉我猫鼬的节点模块中某个地方存在未捕获的错误,并且它无法“读取未定义的属性0”,因此我认为如果没有权限,这种情况会发生访问电子邮件范围(因为它执行newUser.facebook.email = profile.emails [0] .value;),所以我试图注释掉该行。

在注释掉该行之后,登录后服务器将不再崩溃,当我重定向到个人资料页面时,我得到了令牌,ID和displayName。

因此,如果我不请求电子邮件,则登录有效,但是当我添加该行代码以请求电子邮件时,它将崩溃。

我要求的是这样的“电子邮件”范围:

app.get(“ / auth / facebook”,护照.authenticate(“ facebook”,{作用域:[“电子邮件”]})));

我搜索了以前的问题,但找不到所需的内容。 我能做什么?

read property 0 of undefined profile.emails[0].value read property 0 of undefined表示该profile没有名为emails的属性。

我假设,因为它是单个配置文件,所以它是email而不是emails 此外,它可能是一封电子邮件,而不是一系列电子邮件。

您可以打印profile对象并检查其具有的属性。 然后使用所需的正确属性。

修复。

我在这里找到答案

报价:

从Facebook图形APIv2.4中,我们需要显式指定要获取的字段。

Graph API v2.4简介

因此,我们可以这样写:

passport.use(new FacebookStrategy({
  clientID: config.facebook.clientID,
  clientSecret: config.facebook.clientSecret,
  callbackURL: config.facebook.callbackURL,
  profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
},

由于某种原因,这不在我阅读的passport.js文档中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM