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

Laravel Nova 实现仅活跃用户登录,禁用非活跃用户并强制登出

实现Laravel Nova的非活跃用户限制功能

以下是针对需求的分步实现方案,明确标注每个步骤需要编辑的文件及路径:


1. 禁止非活跃用户登录并显示提示信息

需要编辑的文件:

  • app/Providers/NovaServiceProvider.php
  • (可选,若需自定义错误显示)resources/views/nova/login.blade.php(需先发布Nova视图)

实现代码:

  1. 在NovaServiceProvider.php的boot()方法中扩展Nova的认证逻辑,校验用户活跃状态:
use Laravel\Nova\Nova;
use Laravel\Nova\Http\Requests\LoginRequest;

public function boot()
{
    parent::boot();

    // 自定义Nova登录认证逻辑
    Nova::authenticateUsing(function (LoginRequest $request) {
        $user = \App\Models\User::where('email', $request->email)->first();

        // 校验密码是否正确
        if (! $user || ! \Hash::check($request->password, $user->password)) {
            return null;
        }

        // 校验用户是否活跃
        if (! $user->active) {
            session()->flash('error', 'only active users allowed to login');
            return null;
        }

        return $user;
    });
}
  1. (可选)如果默认Nova登录视图未显示自定义错误,先发布Nova视图文件:
php artisan nova:publish --views

然后编辑resources/views/nova/login.blade.php,在登录表单上方添加错误提示:

@if(session('error'))
    <div class="mb-6 rounded-lg bg-red-50 p-4">
        <p class="text-sm text-red-600">{{ session('error') }}</p>
    </div>
@endif

2. 强制已登录的非活跃用户登出

需要编辑的文件:

  • app/Http/Middleware/CheckUserActive.php(新建)
  • app/Http/Kernel.php

实现步骤:

  1. 创建校验用户活跃状态的中间件:
    执行命令生成中间件:
php artisan make:middleware CheckUserActive

编辑生成的app/Http/Middleware/CheckUserActive.php:

namespace App\Http\Middleware;

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

class CheckUserActive
{
    public function handle(Request $request, Closure $next)
    {
        // 若用户已登录但账号非活跃,强制登出并跳转登录页
        if (Auth::check() && ! Auth::user()->active) {
            Auth::logout();
            return redirect()->route('nova.login')->with('error', 'Your account is no longer active. You have been logged out.');
        }

        return $next($request);
    }
}
  1. 将中间件添加到Nova的路由中间件组,编辑app/Http/Kernel.php:
    找到$middlewareGroups中的nova组,添加自定义中间件:
protected $middlewareGroups = [
    // ...其他中间件组
    'nova' => [
        \Laravel\Nova\Http\Middleware\Authenticate::class,
        \Laravel\Nova\Http\Middleware\Authorize::class,
        \Laravel\Nova\Http\Middleware\BootTools::class,
        \Laravel\Nova\Http\Middleware\DispatchServingNovaEvent::class,
        \App\Http\Middleware\CheckUserActive::class, // 新增此行
    ],
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:13:59