15

使用:passport-google-oauth2

我想将JWT与 Google 登录一起使用 - 为此我需要禁用会话并以某种方式将用户模型传递回客户端。所有示例都使用神奇地重定向到 '/' 的谷歌回调。

我该怎么做:
1. 在使用 passport-google-oauth2 时禁用会话。
2. google 认证后 res.send() 用户到客户端。

如果我的方向不正确,请随意提出替代方案。

4

1 回答 1

15

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

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

2. 使用 Google 身份验证时,实际发生的是重定向到 google 登录页面,如果登录成功,它会将您重定向回您提供的 url。

这实际上意味着一旦谷歌调用你的回调你就不能做 res.send(token, user) - 它根本不起作用(任何人都可以详细说明为什么?)。所以你被迫通过做重定向到客户端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 请求 - 这让我觉得我可能没有正确理解令牌概念。随意启发我。

于 2016-12-04T15:54:45.910 回答