Laravel,第一个用户是唯一用户

Laravel, first user is only user

我正在建立一个 Laravel 网站供个人使用,我想让第一个在网站上注册的用户成为唯一的用户。因此,通过安装了 ui 的全新 Laravel 安装、迁移排序并且没有用户注册,我希望可以访问注册路由。但是如果有注册用户,就屏蔽注册路由,只允许登录路由可达。

我可以在 web.php

中做这样的事情
Route:get('/register', function () {...})->auth();

但我必须在第一次创建用户后执行此操作。我宁愿以一种更可控的方式来做。

编辑


我不怀疑 @yves-kipondo 的答案是更正确的选择,如果我要为其他人创建这个。

我采用的解决方案很简单。在我的注册控制器中,我只是在构造函数中添加一个检查,如果已经有一个用户 return a 404.

public function __construct() {
  if (!User::all()) {
    $this->middleware('guest');
  } else {
    abort(404);
  }
}

您可以创建一个中间件,它将在 register 路由

上注册
<?php

namespace App\Http\Middleware;

use Closure;

class RegisterOnce
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (User::count() !== 0) {
            // you can redirect wherever you want 
            return redirect('home');
        }

        return $next($request);
    }
}

之后你可以在 app/Http/Kernel.php 中注册中间件,方法是在所有已注册的路由中间件之后添加此行

protected $routeMiddleware = [
    \ ... previous registered middleware

    'once' => App\Http\Middleware\RegisterOnce::class,
];

你可以在 routes/web.php 文件中像这样自定义 register 路由 它将用 Auth::routes();

替换默认设置
Route::get('register', [App\Controllers\Auth\RegisterController::class, 'showRegistrationForm'])
    ->name('register')
    ->middleware('once');