2016-02-12 63 views
0

我试图在节点应用中通过Twitter启用oauth2登录。我有我的Twitter帐户,我被列入电子邮件白名单,已更改Twitter开发页面上的设置(以便登录时,用户被告知我的应用可以访问他们的电子邮件)。从node.js的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); 
       } 
      }); 
     } 
    });}); 

... 

回答

0

SO!这个电话确实不同。对API的verify_credentials调用需要一些可选的参数。看到该文档页:

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

检索用户的电子邮件,添加include_email =真正的参数去您的网址。为了与节点Twitter的API模块做到这一点:

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

该模块需要一个字典,并解析键值对到网址参数,并增加了它们。

容易!

+0

我这样做的验证凭据,我没有得到电子邮件 任何想法为什么? – Erez

+0

它只是电子邮件,你错过了,你是否包括参数,正确拼写的关键?我几个月没有和Node合作过,所以你可能想创建自己的票。 – dylanthelion

+0

管理它,但谢谢 – Erez

相关问题