基本上,我有我的应用程序的登录/注册登陆页面。在用户登录或注册之后,我不希望他们再访问这个路由了。我不知道如何用Hapi.js实现这一点。登录页面不使用任何auth策略,因此它不知道用户是否登录。
发布于 2016-04-17 13:01:28
我通常使用的方法不是禁用路由本身,而是将登录用户从登录路由重定向。
正如您正确指出的,您的登录路由目前不知道用户是否已登录,如果它没有配置auth策略。解决方案是在登录路由中添加一个auth策略,但是使用try模式。这意味着无论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
}
});具有相同结果的另一种方法是在上设置auth策略,尝试模式,作为所有路由的默认设置:
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中有一些关于模式的更多信息。
https://stackoverflow.com/questions/36675665
复制相似问题