Nativescript {N} oAuth插件 - 检索用户Facebook数据

时间:2017-01-23 18:40:00

标签: javascript android facebook oauth nativescript

上下文

我尝试使用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中所定义的那样?

资源

1 个答案:

答案 0 :(得分:0)

您必须更改范围以获取更多详细信息(添加“user_friends”以获取其朋友的列表,为个人资料信息添加“public_profile”)

var facebookInitOptions = TnsOAuthOptionsFacebook = {
    clientId: 'REDACTED',
    clientSecret: 'REDACTED',
    scope: ['email', 'user_friends', 'public_profile']
};

最后,在您的Facebook开发者页面的“应用评论”部分中,确保这些范围字段处于活动状态并显示(它们旁边会有一个带有数据描述的绿点)。如果上述代码不起作用,您可能需要使应用程序生效/启动提交以获得批准。