【问题标题】:Passport authentication without using a templating engine不使用模板引擎的护照认证
【发布时间】:2018-11-26 00:47:54
【问题描述】:

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

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

所以一旦我的谷歌回调在这里成功重定向,我需要重定向到我的客户端数据

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

到目前为止,如果没有模板引擎,我找不到任何可以执行此操作的存储库。有人可以帮忙吗?

【问题讨论】:

  • 您有更多详细信息吗?这听起来很容易。你能解释一下“回来之后”是什么意思吗?它是什么”? “应用程序”是手机应用程序还是网络应用程序?什么是客户?成功验证后,Google 将简单地调用您的回调。你可以做任何你喜欢的事情。我的标准回调是“/google/redirect”,我们这样做:router.get('/google/redirect',passport.authenticate('google'),(req,res) => { // 处理护照 //console.log(req.user); res.redirect('/admin/dashboard'); })
  • 这是一个网络应用程序。到目前为止,客户端是带有 jQ​​uery 的简单 HTML。所以问题是 //console.log(req.user); res.redirect('/admin/dashboard') 这里 /admin/dashboard 寻找服务器端路由,对吗?那么我该如何做是重定向到客户端路由呢?
  • 重定向总是在客户端。例如,当我测试时,我重定向到“http:://localhost/admin/dashboard”。 res.redirect 告诉客户端下一个相对于客户端要转到哪个 URL。你希望你的客户去哪里?例如,如果您进行了身份验证,您可能会有如下重定向:redirect('myfavoritesite.com/userid=12325&name=Ralph")

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


【解决方案1】:

添加重定向路由

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}
    ));
});

【讨论】:

    【解决方案2】:

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

    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>`); 
    });
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您可以选择要在客户端页面中显示的数据,例如令牌过期时间、刷新令牌等,并为您的客户端应用程序创建一个链接 (http://&lt;application_root&gt;/route1/:exptime/:reftoken)。

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

        例如:在 AngularJS 应用程序中-

        应用程序配置:

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

        路由控制器:

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

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

        【讨论】:

          猜你喜欢
          • 2014-03-15
          • 2017-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-05
          • 2011-08-24
          • 2022-11-28
          • 2015-09-23
          相关资源
          最近更新 更多