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

Laravel LdapRecord认证时查询数据库而非Active Directory如何解决?

问题原因

你配置的web认证守卫默认仍绑定Eloquent本地用户提供者,没有切换为你新增的ldap提供者,所以认证流程始终查询本地users表,触发字段不存在错误。

修复步骤
  • 第一步:修改config/auth.php中的守卫配置,将web守卫的provider参数值从users改为ldap
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'ldap', // 此处替换原有值users
    ],
],
  • 第二步:调整LoginController的credentials方法的字段键名,你配置的AD属性到本地字段的映射规则为mail同步到email,所以凭证匹配键改为email即可,LdapRecord会自动关联AD的mail属性查询
protected function credentials(Request $request)
{
    return [
        'email' => $request->email,
        'password' => $request->password,
    ];
}
  • 第三步:确认你的App\Models\User类已经实现LdapRecord\Laravel\Auth\LdapAuthenticatable接口并引入LdapRecord\Laravel\Auth\AuthenticatesWithLdap trait,示例如下:
use LdapRecord\Laravel\Auth\AuthenticatesWithLdap;
use LdapRecord\Laravel\Auth\LdapAuthenticatable;

class User extends Authenticatable implements LdapAuthenticatable
{
    use AuthenticatesWithLdap;
    
    // 原有模型代码
}
  • 第四步:执行命令清空配置缓存,确保修改后的配置生效
    php artisan config:clear
可选补充配置

如果你需要保留AD不可用时fallback到本地用户认证的能力,可在config/auth.php的ldap提供者配置中新增fallback参数:

'ldap' => [
    'driver' => 'ldap',
    'model' => LdapRecord\Models\ActiveDirectory\User::class,
    'database' => [
        'model' => App\Models\User::class,
        'sync_passwords' => false,
        'sync_attributes' => [
            'name' => 'cn',
            'email' => 'mail',
            'username' => 'samaccountname',
        ],
        'fallback' => true, // 新增该行
    ],
],

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:04