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');
我正在建立一个 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');