AuthController.php,验证函数
public function authenticate(Request $request)
{
$credentials = $request->all();
$request->validate([
'email' => 'required|email:dns',
'password' => 'required|min:8|max:16'
]);
if (Auth::attempt($credentials)) {
$user = Auth()->user();
$usertype = Auth()->user()->usertype;
Auth::login($user);
if ($usertype == 'user') {
return redirect('/');
} else if($usertype == 'admin') {
return redirect('/dashboard');
}
}
return back()->with('loginError', 'Login Failed');
}
登录路线
Route::get('/login', [AuthController::class, 'login'])->name('login')->middleware('guest');
Route::post('/login', [AuthController::class, 'authenticate']);
用户迁移
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('surname');
$table->char('nik');
$table->string('email')->unique();
$table->string('password');
$table->string('conpass');
$table->string('usertype')->default('user');
$table->rememberToken();
$table->timestamps();
});
}
你好。我正在尝试创建一个身份验证,如果用户类型是管理员,它将转到
/dashboard
。我已在数据库中添加了用户类型,但它仍然不断重定向到 /
页面。谁能告诉我哪里出了问题或者我错过了什么?预先感谢您。
你读过 Laravel 守卫相关的文档吗? 因为 Laravel 使用守卫进行多登录,这允许您的应用程序同时登录多种类型的用户。 不使用防护会产生的问题之一是假设用户同时拥有管理员帐户和普通用户帐户。 如果该用户在浏览器中打开两个选项卡,在一个选项卡中以普通用户身份登录,在另一个选项卡中以管理员身份登录,则应用程序会感到困惑,无法确定登录用户是管理员还是普通用户。 以下是 Laravel Guards 文档的链接:link
此外,如果您有兴趣学习和改进代码,请考虑学习 PHP 中的枚举和 Laravel 中的请求验证类。