You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 7.x/8.x 如何简便实现全局强制登录自动跳转?

Laravel 7/8 全站强制登录实现方案

不需要逐个修改控制器、视图或路由定义,通过全局中间件+自定义配置项即可实现需求,步骤如下:

  • 第一步:添加开关配置项
    打开配置文件config/auth.php,在配置数组中追加自定义开关:
'force_login' => env('FORCE_LOGIN', false),

配置默认值为false,和预期逻辑一致:值为true时强制全站登录校验,值为false时跳过校验。如果需要快速切换,也可以直接在.env文件中添加FORCE_LOGIN=true/false控制。

  • 第二步:生成校验中间件
    在项目根目录执行artisan命令创建自定义中间件:
php artisan make:middleware ForceLoginMiddleware

打开生成的文件app/Http/Middleware/ForceLoginMiddleware.php,写入以下逻辑,注意头部引入Auth门面:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class ForceLoginMiddleware
{
    public function handle($request, Closure $next)
    {
        // 开关关闭时直接放行所有请求
        if (!config('auth.force_login')) {
            return $next($request);
        }

        // 已登录用户直接放行
        if (Auth::check()) {
            return $next($request);
        }

        // 白名单路由:认证相关页面必须放行,否则会出现重定向死循环
        $except = [
            'login',
            'register',
            'password.*', // 通配符匹配所有找回密码相关路由
        ];
        if ($request->routeIs(...$except)) {
            return $next($request);
        }

        // 未登录用户跳转至登录页
        return redirect()->route('login');
    }
}

如果后续有不需要登录就能访问的公开页面(比如隐私政策、用户协议页),只需要把对应路由的名称加到$except白名单数组即可。

  • 第三步:注册全局中间件
    打开app/Http/Kernel.php文件,找到$middlewareGroups属性下的web中间件组,把刚才创建的中间件追加到数组末尾(注意要放在StartSession、ShareErrorsFromSession这类系统中间件之后,否则无法获取登录状态):
protected $middlewareGroups = [
    'web' => [
        // 原有系统中间件保持不动
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        // 追加刚创建的强制登录中间件
        \App\Http\Middleware\ForceLoginMiddleware::class,
    ],

    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

注意:如果项目开启了配置缓存,修改配置后执行php artisan config:clear即可生效。该方案完全兼容Laravel 7.x、8.x版本,不需要改动现有业务代码,开关切换无侵入。

内容的提问来源于stack exchange,提问作者Shiping

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:45:37