0

我还有用户表,它有记录。

我想登录用户,如果他们与他们的广告信息匹配。如果我的数据库中不存在他们的 AD 信息,则创建新记录。

但如果 objectguId 字段为空,Adldap2 总是尝试创建新记录。

我的 ldap_auth.php 文件:

    'ldap' => [

        'locate_users_by' => 'userprincipalname',

        'bind_users_by' => 'distinguishedname',

    ],

    'database' => [

        'guid_column' => 'objectguId',

        'username_column' => 'username',

    ],

我的登录控制器:

        $credentials = $request->only('username', 'password');
        $aw = Auth::attempt($credentials);
        if ($aw) {
            $results = array('status' => 1, "message" => "Login success", "redirect" => "/");
        }

用户使用他的电子邮件和密码登录。并成功连接。

但是如果没有匹配的objectguId,它会尝试创建新记录。所以它返回“重复条目”,因为这封电子邮件是在我的数据库上创建的,没有 objectguId。

我想要它以防电子邮件匹配,所以更新记录。如果没有,则创建新记录。

但无法解决任何问题。

4

1 回答 1

0

您是否尝试过“updateOrCreate”方法?

剧透警报:您也可以尝试“upsert”方法。这是一个用 3 种方法很好地解释的链接。我会在你的情况下使用 updateOrCreate,但看看 upsert:https ://www.youtube.com/watch?v=J8x268as2qo&ab_channel=LaravelDaily

注意:这里我假设您的“objectguId”是“用户”表中的一列。

尝试在你的控制器中做这样的事情:

$credentials = $request->only('username', 'password');
if(Auth::attempt($credentials)) {
    $aw = Auth::attempt($credentials);
    $user = User::where('username', $request->username)->first();
}

$new_information = [
    'username' => $request->username,
    'password' => $request->password,
    'objectguId' => $user->objectguId,
];
$old_information = [
    'username' => $request->username,
    'password' => $request->password,
];
$user = User::updateOrCreate($old_information, $new_information); // Here, as first parameter you pass what you need to find and, as second parameter, the information you need to update if the query finds the data or create if not

$user->save();
于 2021-12-22T11:12:30.747 回答