Laravel中间件注销

5ktev3wc  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(95)

我想在我的Laravel 9项目中做一个中间件,如果用户不活动,他们会自动注销。在我的中间件类中,如下所示。

public function handle(Request $request, Closure $next)
{
    if (Auth::user()->is_active != 1) {
        return Auth::logout();
    }

    return $next($request);
}

但是当我尝试的时候,我得到了这样的错误。

我做错什么了吗?

7fhtutme

7fhtutme1#

你已经很接近了,只需要做一些小的改动。
所以问题是你的中间件通常会返回$next($request);,否则它会破坏Laravel的内部管道(你可以阅读这篇很好的博客文章来了解更多关于中间件和管道Understanding Laravel Pipelines的信息)。
但是在您的情况下,返回该值可能不起作用,因为您的auth中间件必须在此之前已经执行过。
最简单的处理方法是注销并中止(假设在这种情况下返回401响应),类似于

public function handle(Request $request, Closure $next)
{
    if (Auth::user()->is_active != 1) {
        Auth::logout();
        abort(401, 'User is not active');
    }
    return $next($request);
}
bf1o4zei

bf1o4zei2#

logout函数不会返回该对象,也无法从中间件进行重定向。

你能做的是

public function handle(Request $request, Closure $next)
{
    if (Auth::check() && Auth::user()->is_active != 1) {
        Auth::logout();
        return redirect('/login'); # add you login route
    }
    return $next($request);
}

相关问题