我尝试使用JavaScript创建一个Nativecript的Android应用。在第一页上,它要求用户连接Facebook,我打算验证一个帐户是否与他们的电子邮件地址一起存在。
我使用nativescript-oauth
包来处理与Facebook的OAuth连接。我通过命令行在Windows 10计算机上工作。
app.js
var tnsOAuthModule = require("nativescript-oauth");
var facebookInitOptions = TnsOAuthOptionsFacebook = {
clientId: 'REDACTED',
clientSecret: 'REDACTED',
scope: ['email']
};
tnsOAuthModule.initFacebook(facebookInitOptions);
application.start({ moduleName: "views/start/start" });
start.js
//...
var tnsOAuthModule = require("nativescript-oauth");
//...
exports.fbConnect = function(){
console.log("Facebook Connect button tapped");
tnsOAuthModule.login()
.then(()=>{
console.log('logged in');
var token = tnsOAuthModule.accessToken();
console.log("FB Auth token: " + token);
console.log(JSON.stringify(tnsOAuthModule));
})
.catch((er)=>{
console.log(er);
});
console.log("Login sucessful");
}
以上输出如下:
JS: Facebook Connect button tapped
...
JS: logged in
JS: FB Auth token: EAAC50oamJosBAF1F3lrGAOntENgSAZA40w4iE3rNOLP1W_REDACTED_Cb7yS9ZB1Ro4qhLroOMwZD
JS: {"instance":{"tokenResult":{"accessToken":"EAAC50oamJosBAF1F3lrGAOntENgSAZA40w4iE3rNOLP1W_REDACTED_Cb7yS9ZB1Ro4qhLroOMwZD","accessTokenExpiration":"2017-03-24T18:27:04.176Z","refreshTokenExpiration":"2017-03-24T18:27:04.176Z"},"credentials":{"authority":"https://www.facebook.com/dialog","tokenEndpointBase":"https://graph.facebook.com","authorizeEndpoint":"/oauth","tokenEndpoint":"/v2.3/oauth/access_token","clientId":"REDACTED","clientSecret":"REDACTED","redirectUri":"https://www.facebook.com/connect/login_success.html","scope":"email"}}}
JS: Application started successfully
正如您所看到的,我成功地授权Facebook应用并检索有效的访问密钥,并且可以解析返回的对象 - 但是我试图检索用户'电子邮件地址。我可以看到"电子邮件"属于范围。
如何使用nativescript-oauth
插件或上述对象中的数据来检索用户'电子邮件地址,如scope
中所定义的那样?
答案 0 :(得分:0)
您必须更改范围以获取更多详细信息(添加“user_friends”以获取其朋友的列表,为个人资料信息添加“public_profile”)
var facebookInitOptions = TnsOAuthOptionsFacebook = {
clientId: 'REDACTED',
clientSecret: 'REDACTED',
scope: ['email', 'user_friends', 'public_profile']
};
最后,在您的Facebook开发者页面的“应用评论”部分中,确保这些范围字段处于活动状态并显示(它们旁边会有一个带有数据描述的绿点)。如果上述代码不起作用,您可能需要使应用程序生效/启动提交以获得批准。