[英]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.