我有一個的node.js服務器應用INVALID_REQUEST從Node.js的
app.get('/AuthorizeGoogle.html',function(req,res) {
var auth = new googleapis.OAuth2Client(config.google_login.client_id, config.google_login.client_secret, config.google_login.redirect_uri);
var queryData = url.parse(req.url,true).query;
var code = encodeURIComponent(queryData.code);
console.log('Authorization Request recieved ');;
console.log('Retrieiving token');
auth.getToken(code,function(err,tokens) {
console.log('Retrievied token ');
console.log(tokens);
console.log('**** ERROR ****');
console.log(err);
console.log('Calling setCredentials');
auth.setCredentials(tokens);
console.log('*****FINISHED!!!!!');
});
res.send('Authorization recieved ' + queryData.code)
});
當谷歌的回報,並且用戶已經授權訪問他們的帳戶,谷歌這就是所謂下面的代碼。
我得到一個代碼。但是,當auth.getToken()我越來越invalid_request。我已經成功地在C#中做到了這一點,但我現在正在更多的開源工具,因此移動項目Node.js加載
在此先感謝
行 - 我再次建議的頁面看起來和做了一些重構我的代碼和工作。我認爲可能是這個問題的是Url過去首先獲得令牌。
我已經初始化的oauth2Client
var OAuth2Client = googleapis.OAuth2Client;
var oauth2Client;
oauth2Client = new OAuth2Client(config.google_login.client_id, config.google_login.client_secret, config.google_login.redirect_uri);
所需的客戶端ID,祕密和重定向URL已經在配置文件中
被定義所以首先我改變了我生成URL的方式。首先,我將Url設置爲Google登錄到GoogleLogin.html,當服務器收到此頁面的請求時,它會執行以下操作。
app.get('/GoogleLogin.html',function(req,res) {
var scopes = "";
// retrieve google scopes
scopes += config.google_login.scopes.baseFeeds + " "
scopes += config.google_login.scopes.calendar + " "
scopes += config.google_login.scopes.drive + " "
scopes += config.google_login.scopes.driveMetadata + " "
scopes += config.google_login.scopes.profile + " "
scopes += config.google_login.scopes.email + " "
scopes += config.google_login.scopes.tasks
var url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes
});
res.writeHead(302, {location: url});
res.end();
});
這首先重定向到生成的URL之前建設範圍,然後生成授權URL的字符串
當谷歌重定向到該網站執行
app.get('/AuthorizeGoogle.html',function(req,res) {
// var auth = new googleapis.OAuth2Client(config.google_login.client_id,config.google_login.client_secret, config.google_login.redirect_uri);
var queryData = url.parse(req.url,true).query;
var code = queryData.code;
console.log('Authorization Request recieved ');;
console.log('Retrieving token');
oauth2Client.getToken(code,function(err,tokens) {
console.log('Retrieved token ');
console.log(tokens);
console.log('**** ERROR ****');
console.log(err);
console.log('Calling setCredentials');
oauth2Client.setCredentials(tokens);
console.log('*****FINISHED!!!!!');
});
res.send('Authorization recieved ' + queryData.code)
});
這下面現在正確返回令牌和刷新令牌。由於它是相同的代碼,我唯一能做的就是錯誤的是最初打給Google的電話。
你不應該叫'encodeURIComponent'。 – SLaks
謝謝,但我補充說,看看它是否需要它 - 我仍然得到invalid_request沒有它。 –
[Error:invalid \ _request getToken]可能重複(http://stackoverflow.com/questions/33874339/error-invalid-request-gettoken) – locrizak