Laravel双表登录Auth Attempt Failed问题排查求助
Laravel双表登录认证失败(Auth Attempt Failed)排查指南
1. 检查config/auth.php配置
- 确认已添加对应
Inspirator的认证守卫:'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'inspirator' => [ 'driver' => 'session', 'provider' => 'inspirators', // 对应下面的用户提供者 ], ], - 确认用户提供者配置正确,指定模型和对应表:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'inspirators' => [ 'driver' => 'eloquent', 'model' => App\Models\Inspirator::class, // 确保模型路径准确 'table' => 'inspirators', // 表名非复数时需手动指定 ], ], - 若涉及密码重置,确认对应配置已添加:
'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'inspirators' => [ 'provider' => 'inspirators', 'table' => 'inspirator_password_resets', 'expire' => 60, ], ],
2. 检查Inspirator模型实现
- 确保模型继承
Authenticatable并引入认证Trait:namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class Inspirator extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'password', // 必须包含登录所需字段 ]; protected $hidden = [ 'password', 'remember_token', ]; // 若登录字段不是email,需重写此方法 public function username() { return 'phone'; // 示例:用手机号作为登录标识 } } - 确认数据库表中
password字段存储的是Laravel加密后的哈希值(禁止明文存储,可通过bcrypt('测试密码')生成哈希值测试)。 - 可选:若控制器未指定守卫,可在模型中设置默认守卫:
protected $guard = 'inspirator';
3. 检查登录表单视图
- 确认表单字段名与控制器接收的凭证字段一致:
<form method="POST" action="{{ route('inspirator.login') }}"> @csrf <div> <label>邮箱</label> <input type="email" name="email" value="{{ old('email') }}" required autofocus> </div> <div> <label>密码</label> <input type="password" name="password" required> </div> <div> <input type="checkbox" name="remember"> <label>记住登录状态</label> </div> <div> <button type="submit">登录</button> </div> </form> - 排查字段名拼写错误,比如
email误写为e-mail、password误写为passwd等。
4. 检查AuthController逻辑
- 确认使用指定守卫执行认证:
namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { public function showLoginForm() { return view('inspirator.login'); } public function login(Request $request) { // 验证请求字段 $credentials = $request->validate([ 'email' => 'required|email', 'password' => 'required|string', ]); // 使用inspirator守卫尝试登录 if (Auth::guard('inspirator')->attempt($credentials, $request->filled('remember'))) { $request->session()->regenerate(); return redirect()->intended('/inspirator/dashboard'); } // 登录失败返回错误信息 return back()->withErrors([ 'email' => '提供的凭证与记录不符。', ])->onlyInput('email'); } public function logout(Request $request) { Auth::guard('inspirator')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } } - 确认控制器中间件配置正确,指定未登录状态下访问:
public function __construct() { $this->middleware('guest:inspirator')->except('logout'); }
5. 额外排查步骤
- 清除配置缓存:执行
php artisan config:clear和php artisan cache:clear,确保最新配置生效。 - 核对数据库记录:确认目标用户存在,登录字段(如email)无拼写错误,密码为哈希格式。
- 开启调试模式:在
.env中设置APP_DEBUG=true,查看更详细的错误提示。 - 查看日志文件:检查
storage/logs/laravel.log,获取认证失败的具体原因。
内容的提问来源于stack exchange,提问作者Gagas Amukti
相关产品推荐
相关产品推荐

