首页 > 解决方案 > 如何将 Google oAuth 与 Node.js 后端和 Angular 前端一起使用?

问题描述

我在后端使用 Node.js 并在每次登录时为用户创建一个令牌。angularx-social-login包使得 Google OAuth 与 Angular 的集成变得非常容易,但是如何将它与 API 一起使用呢?成功登录后,Google 会返回带有令牌的用户信息。我正在考虑将此信息发送到后端并登录用户,但为此我需要创建一个接受电子邮件地址和登录用户的路由。这将返回不安全的 JWT 令牌。安全我的意思是,任何人都可以在没有 Google 身份验证的情况下访问路由并生成令牌。

我正在寻找开发人员如何实现这一目标的想法。

标签: node.jsangulargoogle-oauth

解决方案


我找到google-auth-library了由 Google 管理的 Node.js 客户端包。

以下是:

  1. 使用 Angular 登录用户
  2. 将 idToken 发送到后端
  3. 验证令牌和对 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)
      );
    });
};

推荐阅读