【问题标题】:Request user email from Twitter in node.js在 node.js 中从 Twitter 请求用户电子邮件
【发布时间】:2016-05-24 00:30:57
【问题描述】:

我正在尝试在节点应用程序中通过 Twitter 启用 oauth2 登录。我有我的 Twitter 帐户,我被列入电子邮件白名单,更改了 Twitter 开发页面上的设置(以便在登录时通知用户我的应用可以访问他们的电子邮件)。

但用户对象仍然不包含电子邮件条目。电子邮件是一个不同的请求,还是我遗漏了什么?我会将服务器代码放在下面,并且可以按需启动 Web 服务器,以防有人想查看控制台输出。

我的 server.js 中的相关代码:

var express = require('express'),
request = require('request'),
path    = require('path'),
fs = require('fs'),
bodyParser = require("body-parser");

var Twitter = require("node-twitter-api");
var app = express();
...
var twitter = new Twitter({
    consumerKey: 'XXXXXXX',
    consumerSecret: 'XXXXXX',
    callback: 'http://thelionstestingjungle.com'});

var _requestSecret;

app.get("/tokenRequest", function(req, res) {
console.log('Token request');
twitter.getRequestToken(function(err, requestToken, requestSecret) {
    if (err) {
        console.log('Token request error');
        res.status(500).send(err);
    } else {
        console.log('Request secret: ' + requestSecret);
        _requestSecret = requestSecret;
        res.redirect("https://api.twitter.com/oauth/authenticate?oauth_token=" + requestToken);
    }
});});

app.get("/accessToken", function(req, res) {
console.log('Access token');
var requestToken = req.query.oauth_token,
verifier = req.query.oauth_verifier;

twitter.getAccessToken(requestToken, _requestSecret, verifier, function(err, accessToken, accessSecret) {
        if (err) {
            console.log('Get info error');
            res.status(500).send(err);
        } else {
            twitter.verifyCredentials(accessToken, accessSecret, function(err, user) {
                if (err) {
                    console.log('Verification in get info error');
                    res.status(500).send(err);
                } else {
                    console.log('User: ' + JSON.stringify(user));
                    res.send(user);
                }
            });
        }
    });});

...

【问题讨论】:

    标签: node.js twitter oauth-2.0


    【解决方案1】:

    所以!呼唤确实不一样。对 API 的 verify_credentials 调用需要一些可选参数。查看文档页面:

    https://dev.twitter.com/rest/reference/get/account/verify_credentials

    要检索用户电子邮件,请将 include_email=true 参数添加到您的 URL。使用 node-twitter-api 模块执行此操作:

    var params = {
                    'include_email' : true
                };
    twitter.verifyCredentials(accessToken, accessSecret, params, function(err, user)
    

    该模块接受一个字典,并将键值对解析为 URL 参数,并为您添加它们。

    简单!

    【讨论】:

    • 我和验证凭据一样,但我不知道为什么会收到电子邮件?
    • 您丢失的只是电子邮件,您是否包含了参数,并且密钥拼写正确?我已经几个月没有使用 Node 了,所以你可能想创建自己的票。
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 2015-12-28
    • 2015-02-26
    • 2013-02-10
    • 2015-04-25
    • 2016-11-11
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多