node.js - 如何将 Google oAuth 与 Node.js 后端和 Angular 前端一起使用?
问题描述
我在后端使用 Node.js 并在每次登录时为用户创建一个令牌。angularx-social-login
包使得 Google OAuth 与 Angular 的集成变得非常容易,但是如何将它与 API 一起使用呢?成功登录后,Google 会返回带有令牌的用户信息。我正在考虑将此信息发送到后端并登录用户,但为此我需要创建一个接受电子邮件地址和登录用户的路由。这将返回不安全的 JWT 令牌。安全我的意思是,任何人都可以在没有 Google 身份验证的情况下访问路由并生成令牌。
我正在寻找开发人员如何实现这一目标的想法。
解决方案
我找到google-auth-library
了由 Google 管理的 Node.js 客户端包。
以下是:
- 使用 Angular 登录用户
- 将 idToken 发送到后端
- 验证令牌和对 Angular 的响应
节点.js:
exports.googleLogin = function(req, res, next) {
//verify the token using google client
return googleClient
.verifyIdToken({
idToken: req.body.token,
audience: config.google.clientID
})
.then(login => {
//if verification is ok, google returns a jwt
var payload = login.getPayload();
var userid = payload['sub'];
//check if the jwt is issued for our client
var audience = payload.aud;
if (audience !== config.google.clientID) {
throw new Error(
'error while authenticating google user: audience mismatch: wanted [' +
config.google.clientID +
'] but was [' +
audience +
']'
);
}
//promise the creation of a user
return {
name: payload['name'], //profile name
pic: payload['picture'], //profile pic
id: payload['sub'], //google id
email_verified: payload['email_verified'],
email: payload['email']
};
})
.then(user => {
return res.status(200).json(user);
})
.catch(err => {
//throw an error if something gos wrong
throw new Error(
'error while authenticating google user: ' + JSON.stringify(err)
);
});
};
推荐阅读
- mysql - nodejs mysql连接池在每个require语句后不断重新初始化
- java - 如何有效地将 2 种不同类型的多维集合转换为多维列表
- python - Raspberry Pi 未在 Pyhton 中通过串行通信正确向设备发送指令
- vb.net - 在 vb.net 中将 ByRef 变量设置为存储的 proc 输出
- reactjs - 在 React Native 树中的父子之间进行通信,无需访问父组件的父组件
- math - 围绕枢轴移动和旋转对象并从停止的位置恢复
- java - 如何在JAVA中用特殊字符`\`初始化字符串?
- python - 不能使用 cv2.xfeatures2d.SIFT_create()
- r - subscript after superscript using bquote in R
- vue.js - Axios 只有“heroku 本地网络”的 URL 错误