会话过期后,重定向到登录页面



在Laravel中,用户保持非活动状态x分钟后,会话过期并注销。但是,他仍然可以在应用程序中,直到他刷新页面或转到另一条路由。

是否有办法在会话到期后自动将他重定向到登录页面,而无需刷新页面?

据我所知,我必须用Ajax请求来做,但我不确定如何。这是我搜索了一段时间后发现的:

$.ajax({
url:url,
type:"POST",  // or get
data:parameters,
error: function(xhr, type, error){
window.location.replace("/login");
}
});

您可以在用户登陆具有会话生存期的页面时启动超时,并请求检查用户是否仍在登录

// 4 hours
let sessionLifetime = 4 * 60 * 60;
setTimeout(() => {
// an authenticated endpoint, could be anything, if request fail, then user is not logged in anymore
axios.get('/me').catch(e => {
window.location.replace("/login");
})
}, sessionLifetime * 1000);

唯一的缺点是,通过发出请求,您刷新会话,所以如果请求通过,您只需要重新启动超时:


// 4 hours
let sessionLifetime = 4 * 60 * 60;
let isAuth = () => {
// an authenticated endpoint, could be anything, if request fail, then 
user is not logged in anymore
axios.get('/me').then(() => {
setTimeout(isAuth, sessionLifetime * 1000)
}).catch(e => {
window.location.replace("/login");
})
}
setTimeout(isAuth, sessionLifetime * 1000)

您可以为该检查创建一个专用端点,而不是使用随机端点。这里我使用axios, jquery也是一样的原理$.ajax

另一种解决方案是假设用户在超时执行时不再登录,而不检查请求,但这更有风险,因为用户可以打开另一个选项卡

相关内容

  • 没有找到相关文章

最新更新