首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户使用Hapi.js登录,则禁用登录路由

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

Stack Overflow用户
提问于 2016-04-17 11:03:24
回答 1查看 844关注 0票数 3

基本上,我有我的应用程序的登录/注册登陆页面。在用户登录或注册之后,我不希望他们再访问这个路由了。我不知道如何用Hapi.js实现这一点。登录页面不使用任何auth策略,因此它不知道用户是否登录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-17 13:01:28

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

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

所以你的路线可能是这样的:

代码语言:javascript
复制
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
    }
});

具有相同结果的另一种方法是在上设置auth策略,尝试模式,作为所有路由的默认设置:

代码语言:javascript
复制
server.auth.strategy('session', 'cookie', 'try', {     
    password: 'password-that-is-longer-than-32-chars',
    isSecure: true
});

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

mode -如果为真,该方案将自动被指定为任何路由的必要策略,而不需要auth配置。只能分配给单个服务器策略。值必须为true (与“required”相同)或有效的身份验证模式(“必需”、“可选”、“尝试”)。默认为false。

hapi站点上的Authentication tutorial中有一些关于模式的更多信息。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36675665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档