Laravel проверять параметр проверки, только если не зарегистрированный пользователь - PullRequest
0 голосов
/ 16 января 2020

У меня есть форма, которая отображает Google reCaptcha, если ни один пользователь не вошел в систему. Если есть пользователь, вошедший в систему, reCaptcha не отображается.

OK.

Но когда я проверяю эти Параметры POST Мне нужно проверить, вошел ли пользователь в систему или нет, чтобы проверить reCaptcha или нет. Вот так:

//Check if logged in user
        if (Auth::check()) {
            $request->validate([
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
            ]);
        } else {
            $request->validate([
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
                'g-recaptcha-response' => 'recaptcha',              //Recaptcha Google Check
            ]);
        }

Итак, есть ли более симпатичное встроенное решение?

Ответы [ 2 ]

1 голос
/ 16 января 2020

Вы можете сначала создать список. Затем добавьте повтор, если пользователь вошел в систему:

$fields = [
                'category' => 'bail|required|numeric',
                'title' => 'bail|required|max:160|banned_words',
                'price' => 'numeric',
                'description' => 'bail|required|banned_words',
                'contact_name' => 'bail|required|max:100',
                'contact_email' => 'bail|required|email|max:140',
                'phone' => 'bail|required|max:20',
                'ad_region' => 'bail|required|numeric',
                "agree" => 'bail|required',
            ];
//Check if this is a guest user
if (!Auth::check()) {
   $fields['g-recaptcha-response'] = 'recaptcha';
}

$request->validate($fields);
1 голос
/ 16 января 2020

Попробуйте:

$request->validate([
    'category' => 'bail|required|numeric',
    'title' => 'bail|required|max:160|banned_words',
    'price' => 'numeric',
    'description' => 'bail|required|banned_words',
    'contact_name' => 'bail|required|max:100',
    'contact_email' => 'bail|required|email|max:140',
    'phone' => 'bail|required|max:20',
    'ad_region' => 'bail|required|numeric',
    "agree" => 'bail|required',
    'g-recaptcha-response' => Auth::check() ? '' : 'recaptcha',
]);

Laravel сама использует пустую строку для пропуска правила проверки, например, проверьте этот код .

...