【问题标题】:Laravel Adldap2 - Update If Email ExistLaravel Adldap2 - 如果电子邮件存在则更新
【发布时间】:2021-12-22 07:02:12
【问题描述】:

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

如果用户与他们的广告信息匹配,我想登录用户。 如果我的数据库中不存在他们的 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。

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

但无法解决任何问题。

【问题讨论】:

    标签: laravel adldap


    【解决方案1】:

    您尝试过“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();
    

    【讨论】:

    • Adlap 卡在 Auth::attempt 方法中。所以我不能更新或创建。
    • 首先尝试调试“dd($request->all());”看看你得到了什么,并检查你在 html 中的名字是否正确。如果是这样,删除第 1 行:"$credentials = $request..." 并替换 if 中的 "$credentials" 并写入 "$request->only('username', 'password')";再次测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2011-08-09
    • 1970-01-01
    • 2022-01-04
    • 2020-08-31
    • 2022-01-11
    • 2011-01-06
    相关资源
    最近更新 更多