node.js – Passport&JWT&Google策略 – 在google回调后禁用session&res.send()

使用: passport-google-oauth2.

我想使用JWT与谷歌登录 – 为此我需要disable session并以某种方式将用户模型传递回客户端.
所有示例都使用magically redirect to ‘/’的谷歌回调.
我如何能:
1.使用passport-google-oauth2时禁用会话.
2. google身份验证后res.send()用户到客户端.

如果我没有朝着正确的方向前进,请随意提出替代方案.

解决方法

通过一些见解来管理以克服这个问题:
1.在express中禁用会话 – 只需删除会话的中间件

// app.use(session({secret: config.secret}))

2.使用Google身份验证时实际发生的情况是,有一个重定向到谷歌登录页面,如果登录成功,它会将您重定向到您提供的URL.

这实际上意味着一旦谷歌调用你的回调你不能做res.send(令牌,用户) – 它根本不起作用(任何人都可以详述为什么?).所以你强制通过res.redirect(“/”)重定向到客户端.
但是整个目的是传递令牌,这样你也可以做res.redirect(“/?token =”token).

app.get( '/auth/google/callback',passport.authenticate('google',{
            //successRedirect: '/',failureRedirect: '/',session: false
        }),function(req,res) {
            var token = AuthService.encode(req.user);
            res.redirect("/home?token=" + token);
        });

但是客户端如何获得用户实体?
所以你也可以以同样的方式传递用户,但它感觉不适合我(在参数列表中传递整个用户实体……).
所以我做的是让客户端使用令牌并检索用户.

function handleNewToken(token) {
        if (!token)
            return;

        localStorageService.set('token',token);

        // Fetch activeUser
        $http.get("/api/authenticate/" + token)
            .then(function (result) {
                setActiveUser(result.data);
        });
    }

这意味着另一个http请求 – 这让我觉得也许我没有做出令牌概念.随意赐教.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...