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

相關問題