【问题标题】:How can I validate the request user in Laravel?如何在 Laravel 中验证请求用户?
【发布时间】:2021-02-16 07:27:59
【问题描述】:

我正在发送更新请求,例如:

Route::put('user/{user}/edit-user-education', 'UpdateUserEducationController@editUserEducation');

我的控制器是:

class UpdateUserEducationController extends Controller
{
    public function editUserEducation(UserEducation $education, User $user, EditUserEducationRequest $request)
    {
        $education->school = $request->school;
        $education->degree = $request->degree;
        $education->user_id = $user->id;  // here to validate

  
        $education->save();

        return response()->json([
            'message' => 'Education Updated'
        ]);
    }
}

现在我如何验证请求 user_id 与已插入 DB 中的 user_id ?我想确保唯一的用户可以更新创建该记录的记录。

怎么做?提前致谢

【问题讨论】:

标签: laravel laravel-7


【解决方案1】:

只需检查当前用户是否与尝试更新记录的用户相同。

class UpdateUserEducationController extends Controller
{
    public function editUserEducation(UserEducation $education, User $user, EditUserEducationRequest $request)
    {
        if($user->id==Auth::user()->id){
            $education->school = $request->school;
            $education->degree = $request->degree;
            $education->user_id = $user->id;  // here to validate

  
            $education->save();

            return response()->json([
                'message' => 'Education Updated'
            ]);
        }
        else{
            return response()->json([
                'error' => 'Invalid User'
            ]);
        } 
    }
}

【讨论】:

    【解决方案2】:

    在此处查看有关验证的文档: https://laravel.com/docs/8.x/validation

    具体来说,我认为您需要 exists 规则: https://laravel.com/docs/8.x/validation#rule-exists

    快速而肮脏的方法是在控制器中添加您的验证,但有一些更好的方法,如文档中所述。我通常选择表单请求,看起来您已经完成了,因为您的请求是 EditUserEducationRequest 的一个实例。

    在控制器中可以添加:

    $validated = $EditUserEducationRequest->validate([
        'user_id' => 'required|exists:users',
    ]);
    

    我假设您的用户表名为users

    您也可以根据文档在表单请求的rules 数组中声明user_idexists 验证规则。

    编辑:

    我实际上错过了您原始帖子中的一项要求,即发送请求的用户必须与正在更新的用户是同一用户。 这可以在表单请求的 authorize 方法中处理,例如:

    public function authorize()
    {
        return $this->user()->id == $this->user_id;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2017-11-21
      • 2020-01-13
      • 2018-02-19
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多