带有password.js + Vue的Google oAuth

我目前在处理连接到我自己的节点Express api服务器的vue应用中无法处理google oAuth登录。

在express api服务器上,我使用护照作为中间件来处理google oauth,通过google成功登录后,我在后端的回调中生成了jwt。

passport.use(new GoogleStrategy({
    clientID: config.get('google.clientID'),
    clientSecret: config.get('google.clientSecret'),
    callbackURL: config.get('google.callbackUrl'),
  },
  function(accessToken, refreshToken, profile, done) {
    User.findOne(
      { socialID: profile.id },
      function (err, user) {
        if (err) {
            return done(err);
        }
        //No user was found... so create a new user with values from Facebook (all the profile. stuff)
        if (!user) {
          user = new User({
            name: profile.displayName,
            email: profile.emails[0].value,
            provider: profile.provider,
            socialID: profile.id,
          });
          user.save(function(err) {
            if (err) console.log(err);
          });
        }

        // the information which shall be inside the jsonwebtoken
        const payload = {
          user: {
            id: user.id
          }
        };

        // create jsonwebtoken and return it
        jwt.sign(
          payload,
          config.get('jwt.secret'), // get the secret from default.json to hash jsonwebtoken
          { expiresIn: config.get('jwt.lifetime') },
          (err, token) => {
            if(err) throw err; // if there is error, throw it and exit
            return done(JSON.stringify(token)); // return jwt token
          }
        );
      }
    );
  }
));

我的api服务器上有这些路由

// @route   GET api/auth/google
// @desc    Google auth route - get User From Google, store it if not exists yet
// @access  Public
router.get('/google',
  passport.authenticate('google', { scope: ['profile', 'email'], session: false })
);

// @route   GET api/auth/google/callback
// @desc    Google callback route
// @access  Public
router.get('/google/callback',
  passport.authenticate('google', { failureRedirect: '/', session: false }),
  function (req, res) {
    res.redirect('http://localhost:8080/?token=' + res);
  }
);

当我在/ auth / google调用我的后端api路由时,我成功地重定向到了Google登录页面。但是,使用我的方法,我试图使用get参数“ token”从回调URL重定向回我的vue应用,以在前端接收令牌。我的后端回调路由中的重定向不起作用。如何将后端生成的令牌传递给前端?

我发现重定向无法正常工作,因为return done()函数期望两个参数可以正常工作。

我在Google护照中间件中更改了完成的功能,如下所示

jwt.sign(
 payload,
 config.get('jwt.secret'), // get the secret from default.json to hash jsonwebtoken
 { expiresIn: config.get('jwt.lifetime') },
  (err, token) => {
    if(err) throw err; // if there is error, throw it and exit
    return done(null, token); // return jwt token
  }
);

现在,在我的路由内,我可以成功地重定向+将令牌添加为get参数-因此,通过这种解决方法,我可以在前端接收到我在后端生成的jwt。

// @route   GET api/auth/google/callback
// @desc    Google callback route
// @access  Public
router.get('/google/callback',
  passport.authenticate('google', { failureRedirect: '/', session: false }),
  function (req, res) {
    let token = res.req.user;
    res.redirect('//localhost:8080/?token=' + token);
  }
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google OAuth2-使用外部生成的访问令牌-带有JS客户端库

来自分类Dev

如何从password.js中的刷新令牌获取新的Google oauth访问令牌

来自分类Dev

如何从password.js中的刷新令牌获取新的Google oauth访问令牌

来自分类Dev

使用带有C#的Google OAuth 2.0登录

来自分类Dev

带有刷新令牌的春季Google OAuth2

来自分类Dev

带有Python3的Google后端oAuth?

来自分类Dev

带有 Vue.JS 的 PHP API

来自分类Dev

是否有任何Node.js客户端库可以对Twitter,Facebook,Google,LinkedIn等进行OAuth和OAuth2 API调用?

来自分类Dev

从password.js中的刷新令牌获取oauth访问令牌

来自分类Dev

带有子域的 OAuth

来自分类Dev

如何在Deno js中使用Google OAuth?

来自分类Dev

Google JS API在OAuth成功后给出403错误

来自分类Dev

带有服务帐户的Google OAuth2-指定要代表的用户电子邮件

来自分类Dev

带有AccessType的Google Analytics(分析)OAuth =在C#中为脱机

来自分类Dev

带有Google OAuth2登录问题的MVC 5应用

来自分类Dev

使用React前端和Rails后端的带有Google Calendar API的客户端OAuth

来自分类Dev

使用React前端和Rails后端的带有Google Calendar API的客户端OAuth

来自分类Dev

我如何获得带有passport-google-oauth20的用户电子邮件

来自分类Dev

带有Google提供者的Spring Oauth2客户端不断要求认证

来自分类Dev

带有oauth2-playground的Google Group API上的批处理请求

来自分类Dev

Google Apps电子邮件设置API和带有服务帐户的oauth2.0凭据

来自分类Dev

带有服务帐户的Google OAuth2-指定用于代表的用户电子邮件

来自分类Dev

带有Visual Basic .net的Google云端硬盘OAuth2身份验证

来自分类Dev

带有devise和omniauth的Google oauth2被视为失败

来自分类Dev

对Google API python客户端的App引擎调用返回403,带有@oauth_required

来自分类Dev

带有Vuex.js的Vue.js组件(而不是vue-i18n.js)

来自分类Dev

带有Django-webpack-loader的vue.js

来自分类Dev

带有Vue JS 2.6和VueCli 4.0的Webpack

来自分类Dev

Vue.js带有复选框的多重搜索

Related 相关文章

  1. 1

    Google OAuth2-使用外部生成的访问令牌-带有JS客户端库

  2. 2

    如何从password.js中的刷新令牌获取新的Google oauth访问令牌

  3. 3

    如何从password.js中的刷新令牌获取新的Google oauth访问令牌

  4. 4

    使用带有C#的Google OAuth 2.0登录

  5. 5

    带有刷新令牌的春季Google OAuth2

  6. 6

    带有Python3的Google后端oAuth?

  7. 7

    带有 Vue.JS 的 PHP API

  8. 8

    是否有任何Node.js客户端库可以对Twitter,Facebook,Google,LinkedIn等进行OAuth和OAuth2 API调用?

  9. 9

    从password.js中的刷新令牌获取oauth访问令牌

  10. 10

    带有子域的 OAuth

  11. 11

    如何在Deno js中使用Google OAuth?

  12. 12

    Google JS API在OAuth成功后给出403错误

  13. 13

    带有服务帐户的Google OAuth2-指定要代表的用户电子邮件

  14. 14

    带有AccessType的Google Analytics(分析)OAuth =在C#中为脱机

  15. 15

    带有Google OAuth2登录问题的MVC 5应用

  16. 16

    使用React前端和Rails后端的带有Google Calendar API的客户端OAuth

  17. 17

    使用React前端和Rails后端的带有Google Calendar API的客户端OAuth

  18. 18

    我如何获得带有passport-google-oauth20的用户电子邮件

  19. 19

    带有Google提供者的Spring Oauth2客户端不断要求认证

  20. 20

    带有oauth2-playground的Google Group API上的批处理请求

  21. 21

    Google Apps电子邮件设置API和带有服务帐户的oauth2.0凭据

  22. 22

    带有服务帐户的Google OAuth2-指定用于代表的用户电子邮件

  23. 23

    带有Visual Basic .net的Google云端硬盘OAuth2身份验证

  24. 24

    带有devise和omniauth的Google oauth2被视为失败

  25. 25

    对Google API python客户端的App引擎调用返回403,带有@oauth_required

  26. 26

    带有Vuex.js的Vue.js组件(而不是vue-i18n.js)

  27. 27

    带有Django-webpack-loader的vue.js

  28. 28

    带有Vue JS 2.6和VueCli 4.0的Webpack

  29. 29

    Vue.js带有复选框的多重搜索

热门标签

归档