【发布时间】:2021-03-03 17:32:20
【问题描述】:
我正在建立一个供个人使用的 Laravel 网站,我想让第一个在该网站上注册的用户成为唯一的用户。因此,在安装了 ui 的全新 Laravel 安装、迁移排序且没有用户注册的情况下,我希望注册路由可以访问。但是如果有注册用户,就屏蔽注册路由,只允许登录路由可达。
我可以在 web.php 中做这样的事情
Route:get('/register', function () {...})->auth();
但我必须在我第一次创建用户后这样做。我宁愿以更可控的方式来做。
编辑
我不怀疑@yves-kipondo 的答案是更正确的选择,如果我要为其他人创建这个。
我采用的解决方案很简单。在我的注册控制器中,我只需在构造函数中添加一个检查,如果已经有用户返回 404。
public function __construct() {
if (!User::all()) {
$this->middleware('guest');
} else {
abort(404);
}
}
【问题讨论】:
-
web.php是一个.php文件,您可以在其中添加逻辑/PHP 代码。检查是否有用户,如果没有,注册路由 -
@kerbh0lz 我建议改用中间件。
web.php文件在每个请求上都会被调用,即使请求是针对完全不同的路由并且这会导致查询被不必要地执行。我相信使用您的策略将不再可能缓存路由文件。 -
@dan 可以缓存它,但您必须在创建用户后缓存它,以便满足条件并且它不会添加路由......缓存将删除附加查询每个请求...但是有不同的方法可以解决这个问题
-
方法有很多。 1.注册用户删除路由
Auth::routes();后,您将无法再注册。 2、修改app\Http\Controllers\Auth\RegisterController.php中RegisterController的代码,修改函数create:protected function create(array $data) { if (User::find(1)->count() == 0) return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); return null; } -
如果这只是供您使用,我将根本没有注册系统,并自己添加用户或编写命令以交互方式创建该用户