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

Laravel 8.x使用sqlsrv驱动时Auth::login()无法生效求助

解决Laravel 8.x + SQL Server用户认证无效问题

核心问题排查与修复步骤

1. 显式指定模型主键

Laravel默认期望主键为小写id,但你的表使用大写ID且未在模型中声明,这会导致Auth系统无法正确识别用户主键,进而无法持久化认证状态。

在Usuario模型中补充主键配置:

class Usuario extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $table = 'TB__USUARIO';
    // 声明主键字段
    protected $primaryKey = 'ID';
    // 若ID为自增主键可保留,非自增则设为false
    public $incrementing = true;
    // 指定主键数据类型
    protected $keyType = 'int';

    protected $fillable = [
        'ID',
        'NOMBRE',
        'CLAVE',
        'ESTA_ACTIVO'
    ];

    protected $casts = [
        'ID' => 'integer',
        'NOMBRE' => 'string',
        'CLAVE' => 'string',
        'ESTA_ACTIVO' => 'boolean'
    ];
}

2. 适配认证字段映射(可选但推荐)

Laravel默认用email作为用户名字段、password作为密码字段,而你的表使用NOMBRE和CLAVE。为了Auth系统兼容性,建议在模型中添加字段映射:

class Usuario extends Authenticatable
{
    // ... 其他代码

    // 替换默认用户名字段
    public function getAuthIdentifierName()
    {
        return 'NOMBRE';
    }

    // 替换默认密码字段
    public function getAuthPassword()
    {
        return $this->CLAVE;
    }
}

3. 检查会话配置与权限

若上述操作无效,需验证会话相关配置:

  • 检查.env中的SESSION_DRIVER,默认file驱动需确保storage/framework/sessions目录具备读写权限;
  • 若使用database会话驱动,需确认会话表已正确迁移至SQL Server。

4. 调试认证流程

在login方法中添加调试代码,确认用户实例的主键有效性:

if ($usuario != null) {
    // 输出用户ID,验证主键值是否正确
    dd($usuario->ID);
    Auth::login($usuario);
    // 登录后立即检查认证状态
    dd(Auth::check(), Auth::id());
    $request->session()->regenerate();
    return redirect()->intended('/pedido');
}

如果Auth::check()返回false,说明用户实例未被Auth系统正确识别,需再次检查主键配置或模型继承逻辑。


内容的提问来源于stack exchange,提问作者pedroPG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:35:17