1

내가 본 문서의 내용을 갔다 측에서받은 액세스 토큰을 수신하고 자바 또는 파이썬 라이브러리를 사용하여 토큰을 새로 고침했지만 nodejs에서 유사한 예제를 찾을 수 없습니다. nodejs를 사용하여 동일한 예제를 어떻게 복제 할 수 있습니까? 게시물을 보내거나 일부 Google oauth api에 요청을 받고 인증 코드를 사용하여 액세스 토큰을받을 수 없습니까? 포함 https://github.com/google/google-api-nodejs-client/tree/master/samples에서구글의 인증 코드를 사용하여 서버 측 자바 스크립트 (nodejs)에 액세스 토큰을 얻기 클라이언트

oauth2Client.getToken(code, function (err, tokens) { 
    // Now tokens contains an access_token and an optional refresh_token. Save them. 
    if (!err) { 
    oauth2Client.setCredentials(tokens); 
    } 
}); 

관계자 예제로 볼 수 있습니다 : 인증 코드의 교환 (선택적 토큰 새로 고침) 액세스 토큰을 제공합니다 사전에 :)

답변

3

Google APIs Node.js Client 라이브러리 oauth2Client.getToken(code, cb)을 제공에서

감사합니다 oauth2.js, oauth 부분의 도우미

this site에 대한 전체 예제는 Paul Shan이 고개를 끄덕였습니다. 예제는 Google APIs Node.js Client입니다. ClientIdClientSecret을 수정하고 http://127.0.0.1:8081

var http = require('http'); 
var express = require('express'); 
var Session = require('express-session'); 
var google = require('googleapis'); 
var plus = google.plus('v1'); 
var OAuth2 = google.auth.OAuth2; 
const ClientId = "YOUR_CLIENT_ID"; 
const ClientSecret = "YOUR_CLIENT_SECRET"; 
const RedirectionUrl = "http://localhost:8081/oauthCallback"; 

var app = express(); 
app.use(Session({ 
    secret: 'raysources-secret-19890913007', 
    resave: true, 
    saveUninitialized: true 
})); 

function getOAuthClient() { 
    return new OAuth2(ClientId, ClientSecret, RedirectionUrl); 
} 

function getAuthUrl() { 
    var oauth2Client = getOAuthClient(); 
    // generate a url that asks permissions for Google+ and Google Calendar scopes 
    var scopes = [ 
     'https://www.googleapis.com/auth/plus.me' 
    ]; 

    var url = oauth2Client.generateAuthUrl({ 
     access_type: 'offline', 
     scope: scopes, 
     //use this below to force approval (will generate refresh_token) 
     //approval_prompt : 'force' 
    }); 

    return url; 
} 

app.use("/oauthCallback", function(req, res) { 
    var oauth2Client = getOAuthClient(); 
    var session = req.session; 
    var code = req.query.code; 
    oauth2Client.getToken(code, function(err, tokens) { 
     console.log("tokens : ", tokens); 
     // Now tokens contains an access_token and an optional refresh_token. Save them. 
     if (!err) { 
      oauth2Client.setCredentials(tokens); 
      session["tokens"] = tokens; 
      res.send(` 
       <html> 
       <body> 
        <h3>Login successful!!</h3> 
        <a href="/details">Go to details page</a> 
       <body> 
       <html> 
      `); 
     } else { 
      res.send(` 
       <html> 
       <body> 
        <h3>Login failed!!</h3> 
       </body> 
       </html> 
      `); 
     } 
    }); 
}); 

app.use("/details", function(req, res) { 
    var oauth2Client = getOAuthClient(); 
    oauth2Client.setCredentials(req.session["tokens"]); 

    var p = new Promise(function(resolve, reject) { 
     plus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) { 
      console.log("response : ", response); 
      resolve(response || err); 
     }); 
    }).then(function(data) { 
     res.send(`<html><body> 
      <img src=${data.image.url} /> 
      <h3>Hello ${data.displayName}</h3> 
      </body> 
      </html> 
     `); 
    }) 
}); 

app.use("/", function(req, res) { 
    var url = getAuthUrl(); 
    res.send(` 
     <html> 
     <body> 
<h1>Authentication using google oAuth</h1> 
     <a href=${url}>Login</a> 
     </body> 
     </html> 
    `) 
}); 


var port = 8081; 
var server = http.createServer(app); 
server.listen(port); 
server.on('listening', function() { 
    console.log(`listening to ${port}`); 
}); 
으로 이동하십시오.