Laravel 从在 API 级别更新它的用户中验证唯一的移动设备?

Posted

技术标签:

【中文标题】Laravel 从在 API 级别更新它的用户中验证唯一的移动设备?【英文标题】:Laravel validate unique mobile out of the user that is updating it on API level? 【发布时间】:2018-12-11 18:41:34 【问题描述】:

作为this link 和this link 无法帮助我,我想知道如何验证正在更新API 级别的用户的独特移动。例如:

public function register(Request $request)

    try 
        $user = User::whereMobileNumber($request->mobile_number)->first();

        /*VALIDATION IF USER NOT FOUND*/
        if ($user == null) 
            $validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|unique:users|min:11|max:11',
            ]);
        else
            /*VALIDATION IF USER HAVE DATA AND IGNORE CHECK MOBILE NUMBER*/
            $validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|min:11|max:11|unique:users,mobile_number,'.$user->mobile_number,
            ]);
        

        if ($validator->fails()) 
            return response(['data' => $validator->errors()->all(), 'status' => $user->mobile_number], 200);
        

        ...
     catch (\Exception $ex) 
        return response(['data' => $ex->getMessage(), 'status' => '5'], 200);
    

不幸的是,我收到了这个错误:

The mobile number has already been taken.

发生了什么,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您必须传递用户 ID 而不是电话号码:

$validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|min:11|max:11|unique:users,mobile_number,'.$user->id,
            ]);

或者你可以像这样使用 laravel Rule 类:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'mobile_number' => [
        'required',mobile_number,
        Rule::unique('users')->ignore($user->id),
    ],
]);

【讨论】:

以上是关于Laravel 从在 API 级别更新它的用户中验证唯一的移动设备?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel / 数据库 - 安全

在 Laravel artisan 命令中使用详细

Google Play 政策更新 | 扩展目标 API 级别要求以增进用户安全

Google Play 政策更新 | 扩展目标 API 级别要求以增进用户安全

Laravel 5 检查权限

用户在Laravel中更新密码后自动退出。我怎么防止这个?