laravel - Laravel 仅在未注册用户时检查验证参数
问题描述
我有一个表单,如果没有用户登录,它会显示 Google reCaptcha。如果有用户登录,则不会显示 reCaptcha。
好的。
但是当我验证这些 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
]);
}
那么,有没有更漂亮的内联解决方案?
解决方案
您可以先创建列表。如果用户已登录,则附加 recaptcha:
$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);
推荐阅读
- r - 如何为 dodge_position 中的两列设置 scale_fill_gradient?
- python - 如何覆盖烧瓶中的管理模型创建表单
- session - 在浏览器网络 JBoss JAAS 授权中看不到 JSESSIONID
- paypal - PayPal 智能支付按钮:如何更改语言
- python-3.x - docker 运行错误:DPI-1047:找不到 64 位 Oracle 客户端库
- javascript - 插槽内子组件中的触发方法,$refs 不起作用
- javascript - StencilJS + Facebook Instant Game,app-root 不渲染
- c++ - 如何设计具有不同类型通知和观察者的观察者模式?
- node.js - 在发送给客户端之前修改 api 响应
- python - 在类级别获取类名