不使用模板引擎的Passport身份验证

时间:2018-06-16 12:44:11

标签: angular express oauth passport.js passport-google-oauth

我正在尝试使用Google策略进行Passport身份验证。我可以通过谷歌验证应用程序,但在它返回到我的快速服务器后,我想将它与配置文件数据一起传递到客户端页面。

这意味着我基本上不想使用模板引擎。

因此,一旦我的谷歌回调点击成功转发,我需要将数据重定向到我的客户端

router.route('/google/callback')
.get(passport.authenticate('google', {
    successRedirect: '/users/',
    failure: '/error/'
}));

到目前为止,我找不到任何没有模板引擎的回购。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:0)

添加重定向路由

app.get('/google/callback/users', function(req, res) {
    return res.json(JSON.stringify( 
           // assume you add the user object after google auth callback
           {user: req.user}
    ));
});

答案 1 :(得分:0)

例如,如果您在索引路由中,则可以从请求对象访问经过身份验证的用户:

router.get('/users', (req, res) => {
  res.send(`<html>
    <body>
    User data: ${JSON.stringify(req.user)}
    </body>
    </html>`); 
});

或者,如果您位于用户路线之内:

router.get('/', (req, res) => {
  res.send(`<html>
    <body>
    User data: ${JSON.stringify(req.user)}
    </body>
    </html>`); 
});

答案 2 :(得分:0)

如果您不想建立到客户端页面的重定向,则可以执行以下操作:

不是将successRedirect设置为后端URL,而是将其设置为Angular路由,然后通过XHRHttpRequest将请求传播到后端,然后将数据返回给客户端。

答案 3 :(得分:0)

您可以选择要在客户端页面上显示的数据,例如令牌到期时间,刷新令牌等,并为客户端应用程序创建链接(http://<application_root>/route1/:exptime/:reftoken)。

在客户端应用程序配置中设置路由处理程序。

例如:在AngularJS应用程序中-

应用程序配置:

$routeProvider
        .when('/route1/:exptime/:reftoken', {
            templateUrl: 'route1.html',
            controller: 'RoutingController'
        })

RoutingController:

module.controller("RoutingController", function ($scope, $routeParams) {
    // Using $routeParams
    $scope.param1 = $routeParams.exptime;
    $scope.param2 = $routeParams.reftoken;
});

这样,您可以在视图上获得所需的输出,还可以避免在nodejs应用程序中使用模板引擎。