如果用户使用Hapi.js登录,则禁用登录路由

时间:2016-04-17 11:03:24

标签: hapijs

基本上我有我的应用程序的登录/注册登录页面。用户登录或注册后,我不希望他们再次访问此路由。我不知道如何用Hapi.js实现这一目标。登录页面不使用任何身份验证策略,因此不知道用户是否已登录。

1 个答案:

答案 0 :(得分:8)

我通常使用的方法不是禁用路由本身,而是将登录用户重定向到远离登录路由。

正如您指出的那样,如果用户没有配置身份验证策略,您的登录路由目前还不知道用户是否已登录。解决方案是 auth策略添加到登录路由,但使用尝试模式。这意味着无论auth是否成功,都将执行处理程序。诀窍是,您可以检查用户是否经过身份验证(通过检查request.auth.isAuthenticated的值),并做出相应的反应。

所以你的路线可能如下:

server.route({
    config: {
        auth: {
            strategy: 'session',
            mode: 'try'
        }
    },
    method: 'GET',
    path: '/login',
    handler: function (request, reply) {

        if (request.auth.isAuthenticated) {
            return reply.redirect('/');        // user is logged-in send 'em away
        }

        return reply.view('login');            // do the login thing
    }
});

另一种结果相同的方法是将尝试模式下的身份验证策略设置为所有路由的默认策略:

server.auth.strategy('session', 'cookie', 'try', {     
    password: 'password-that-is-longer-than-32-chars',
    isSecure: true
});

注意第三个参数try。使用这种方法,您不需要为路由本身添加任何auth配置,因为默认情况下它会尝试此策略。根据{{​​3}}文档:

  

mode - 如果为true,则该方案会自动分配为任何没有auth配置的路由的必需策略。只能分配给单个服务器策略。值必须为true(与所需的'相同)或有效的身份验证模式(' required',' optional',' try' )。默认为false。

还有关于hapi网站上server.auth.strategy模式的更多信息。

相关问题