使用从客户端收到的 google 授权代码在服务器端 javascript (nodejs) 获取访问令牌
Get access token on server side javascript (nodejs) using google authorization code received from client side
我已经阅读了这份文档:- https://developers.google.com/identity/sign-in/web/server-side-flow
在最后一步它收到授权代码,然后它显示了使用 java 或 python 库接收访问令牌和刷新令牌的示例,但我找不到任何类似的示例节点。
我如何使用 nodejs 复制相同的示例?
我不能只发送 post 或向某些 google oauth api 发送请求并使用授权码接收访问令牌吗?
提前致谢:)
Google APIs Node.js Client library offers oauth2Client.getToken(code, cb)
提供访问令牌(以及可选的刷新令牌)以换取授权码:
oauth2Client.getToken(code, function (err, tokens) {
// Now tokens contains an access_token and an optional refresh_token. Save them.
if (!err) {
oauth2Client.setCredentials(tokens);
}
});
官方示例可在 https://github.com/google/google-api-nodejs-client/tree/master/samples which includes oauth2.js
获得,oauth 部分的帮助程序
您还可以在 this site by Paul Shan, it's a nodejs example using Google APIs Node.js Client. Edit ClientId
and ClientSecret
, run this sample and go to 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}`);
});
我已经阅读了这份文档:- https://developers.google.com/identity/sign-in/web/server-side-flow
在最后一步它收到授权代码,然后它显示了使用 java 或 python 库接收访问令牌和刷新令牌的示例,但我找不到任何类似的示例节点。 我如何使用 nodejs 复制相同的示例? 我不能只发送 post 或向某些 google oauth api 发送请求并使用授权码接收访问令牌吗?
提前致谢:)
Google APIs Node.js Client library offers oauth2Client.getToken(code, cb)
提供访问令牌(以及可选的刷新令牌)以换取授权码:
oauth2Client.getToken(code, function (err, tokens) {
// Now tokens contains an access_token and an optional refresh_token. Save them.
if (!err) {
oauth2Client.setCredentials(tokens);
}
});
官方示例可在 https://github.com/google/google-api-nodejs-client/tree/master/samples which includes oauth2.js
获得,oauth 部分的帮助程序
您还可以在 this site by Paul Shan, it's a nodejs example using Google APIs Node.js Client. Edit ClientId
and ClientSecret
, run this sample and go to 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}`);
});