You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:23