如果计算机的"唤醒"事件传播到浏览器并在JavaScript API中可用,那就太好了.有谁知道这样的事情是否实施了?
更新版本的Laravel(正确)使用POST注销会话.这样做的原因是GET/HEAD只应用于被动操作以符合HTTP.
使用csrf令牌进行POST也可以防止恶意用户/站点将您从会话中注销:https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection
但是,如果会话已超时,并且用户单击注销(触发POST到注销路由),则会收到令牌不匹配错误.这是有道理的 - 令牌不匹配,因为会话已过期.
我可以根据请求变量捕获特定的TokenMismatchException,如果是的话,以他们的快乐方式继续它们(到登出的重定向路径,比如说"home"或"/").像这样:
public function render($request, Exception $e)
{
if ($e instanceof TokenMismatchException && $request->getRequestUri() === '/logout') {
return redirect('/');
}
return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我这样做,首先是令牌的重点是什么?以及如何在会话过期时注销用户,同时保持使用带有CSRF令牌的POST注销的预期结果?
我有一个列的表标记:user_id,token,expires_at。
例:
我有令牌:12345,对我来说,他过期于:2018-06-05
生成新令牌时,最多生成7天。
我该如何检查模型?
我试着做模型的范围:
public function scopeExpired($query) {
return $this->where('expires_at', '<=', Carbon::now())->exists();
}
Run Code Online (Sandbox Code Playgroud)
但是没有用。总是假..