Laravel 中间件无法识别用户已登录
P粉935883292
P粉935883292 2024-03-25 23:18:57
[PHP讨论组]

我正在使用 Laravel 8,我想应用一个中间件来检查用户是否将 is_staffis_superuser 设置为 1,然后他可以访问管理仪表板,否则他无法访问它。

为了做到这一点,我创建了这个:

public function handle($request, Closure $next)
    {
        if(Auth::check()) {
            if(auth()->user()->isSuperUser() || $request->user()->isStaffUser()) {
                return $next($request);
            }else{
                return redirect('/home');
            }
        }else{
            return redirect('/');
        }
    }

现在的问题是它返回 redirect('/'); 意味着中间件无法识别用户已经登录,但他已经登录了。

我已经像这样注册了中间件:

protected $routeMiddleware = [
...
'auth.admin' => \App\Http\Middleware\AdminAuthenticated::class,

并将其应用到我的管理路由(RouteServiceProvider.php):

public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            ...

            Route::middleware('auth.admin')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));
        });
    }

这是 admin.php 路由:

Route::get('/',function (){
    return view('admin.master');
});

那么这里出了什么问题呢?我该如何解决这个问题?

P粉935883292
P粉935883292

全部回复(1)
P粉354602955

您没有显示整个路由,但我敢打赌您的使用永远不会被记录。

您可能会申请:

Route::middleware('auth.admin')
                ->namespace($this->namespace)
                ->prefix('admin')
                ->group(base_path('routes/web/admin.php'));

对于所有管理路由。因此,您有登录表单,当您填写登录数据时,用户会点击某个也应用此中间件的端点,因此它永远不会到达您实际登录用户的控制器,因为中间件重定向回 /。

除了登录/提醒密码之外的所有路由都应该应用中间件,否则无法登录。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号