寻找一种方法来执行一些代码,特别是在从使用 Fortify 和 JetStream 的 Laravel 8.x 框架注销时删除/过期一些 cookie。
我注意到几个帖子引用了相同的问题,但不太确定哪个是最好的以及如何实施。
这个: Laravel Fortify Logout Redirect看起来很有希望:
那里的第二个选项说:
创建一个新的 LogoutResponse 类并将重定向逻辑实现到 toResponse 方法中:
应用程序/Http/Responses/LogoutResponse.php
<?php
namespace App\Http\Responses;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Laravel\Fortify\Contracts\LogoutResponse as LogoutResponseContract;
use Symfony\Component\HttpFoundation\Response;
class LogoutResponse implements LogoutResponseContract
{
/**
* Create an HTTP response that represents the object.
*
* @param Request $request
*
* @return Response
*/
public function toResponse($request)
{
return $request->wantsJson()
? new JsonResponse('', 204)
: redirect('www.example.com');
}
}
现在您可以在 FortifyServiceProvider 的 boot 方法中将新响应绑定到服务容器中:
app/Providers/FortifyServiceProvider.php
public function boot()
{
$this->app->singleton(
\Laravel\Fortify\Contracts\LogoutResponse::class,
\App\Http\Responses\LogoutResponse::class
);
}
另请参阅: Laravel Fortify
似乎只是做一个重定向,但在我的情况下,我实际上想要使一组 cookie 过期,并可能在 app/Http/Responses/LogoutResponse.php 中做更多的内务处理。
也不完全确定如何在 Laravel 中删除 cookie,?在某些情况下,用户可能实际上甚至没有登录,我可能想在他们关闭浏览器时删除一个 cookie(也许通过使用 JS 来检测关闭浏览器然后删除 Cookie(后端只有 HTTP cookie?)。
$cookie = \Cookie::forget('cookie_name');