Laravel管理员与用户多登录跳转异常问题求助
Laravel多登录认证跳转异常排查方案
问题描述
在Laravel中实现管理员与用户多登录认证,预期usertype为admin的用户登录后跳转至/dashboard,但目前所有用户登录后均跳转至/,已在数据库添加usertype字段,需排查问题。
相关代码(已格式化)
AuthController.php 的 authenticate 方法
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(); }); }
排查与解决步骤
- 检查数据库
usertype字段值:直接查看users表中管理员用户的usertype,确保值是小写的admin,无大小写错误(如Admin)或额外空格。若值不符,直接修改数据库或调整用户注册/更新逻辑。 - 移除冗余的
Auth::login($user):Auth::attempt($credentials)成功后已自动完成登录,重复调用Auth::login($user)可能导致用户状态异常,删除该行代码即可。 - 调试
usertype实际值:在判断逻辑前添加dd($usertype);,查看当前登录用户的usertype是否符合预期,确认判断逻辑是否生效。 - 检查路由与中间件:确保
/dashboard路由存在且使用auth中间件(而非guest),同时检查RedirectIfAuthenticated中间件,避免其强制跳转覆盖你的自定义逻辑。 - 更新User模型
$fillable:在User模型的$fillable数组中加入usertype,确保Eloquent能正确读取该字段:protected $fillable = [ 'name', 'surname', 'nik', 'email', 'password', 'usertype' ];
内容的提问来源于stack exchange,提问作者Abim
相关产品推荐
相关产品推荐

