web.php(在路由目录内)
Route::get('directLogout', function (Request $request) {
$user = User::where('email', 'pratik@test.com')->first();
Auth::login($user,true);
$path = 'http://localhost/multiframework/public/logout';
try {
//Set logout to Server
$client = new Client([
'base_uri' => 'http://localhost/multiframework/public',
]);
$token = getCSRFToken();
$response = $client->request('POST', $path, [
'form_params' => [
'_token' => $token,
],
// 'form_params' => [
// 'token' => $token, // Tried both. Not working token or _token
// ],
'exceptions' => true,
"headers" => ["Accept" => "application/json",'X-CSRF-Token'=> $token],
]);
return $response->getStatusCode(); // 200 for success, 204 for error
}
catch (\Exception $e) {
echo $e->getMessage();
}
});
function getCSRFToken(){
return csrf_token();
}
** curl 代码**
$url = "http://localhost/multiframework/public/directLogout";
$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => $url, CURLOPT_HTTPHEADER => ["Accept" => "application/json"], CURLOPT_RETURNTRANSFER => true]);
$res = curl_exec($ch);
curl_close($ch);
print_r($res);
die;
错误
客户端错误:POST http://localhost/multiframework/public/logout
导致419 unknown status
响应:{【留言】:“CSRF内标识不匹配。",“异常”:“Symfony\元件\HttpKernel\例外状况\HttpException”,(已截断...)
**注意:**我还尝试绕过VerifyCsrfToken中间件的注销URL。它仍然不起作用。
2条答案
按热度按时间kknvjkwl1#
与其使用curl(因为必须传递用户的会话cookie来验证用户身份,所以比较复杂),不如创建一个API来注销用户:
/api/logout/{user_id}
如果您已经将会话设置为使用数据库,那么注销过程就像从
sessions
表中删除用户的会话行一样简单。一旦删除了会话(通过user_id
列查找),用户将从该网站注销。s8vozzvw2#
我已经找到了解决办法。
我已经在我当前的项目中实现了会话基础登录。
为此,我们需要在当前数据库中创建一个会话表。
https://laravel.com/docs/9.x/session
在config/session.php和.env文件中进行了更改
更改SESSION_DRIVER =数据库
添加以下代码