【问题标题】:Validate the Email which added in the URL in Laravel with using laravel validation rule only仅使用 laravel 验证规则验证在 Laravel 中的 URL 中添加的电子邮件
【发布时间】:2020-05-06 08:41:08
【问题描述】:

我在 Laravel 工作。

我的网址如下:

http://localhost/udonls/public/mastercandidate/candidate/reset-password/11/das@sdadas.com 

现在有一个类似的功能

public function sendCanResLink(Request $request, $id, $email) 
{
       // So in this function how should i validate "$email" using laravel validation ?
}

路线如下:

Route::get('/candidate/reset-password/{id}/{email}', [
   'as'    => 'candidate.reset.password',
   'uses'  => 'CandidateSmdnContoller@sendCanResLink'
]);

总体来说!!我想通过 Laravel 验证来验证我在幼虫的 GET 请求中获得的电子邮件地址。

我知道regex 技术,但我想使用 Laravel 验证技术。

【问题讨论】:

  • 首先你必须改变路由方法。

标签: php laravel


【解决方案1】:

可能是这样的:

 public function sendCanResLink(Request $request, $id, $email) 
 {
    try {
         $validator = Validator::make($email, [
            "email" => "required|email:rfc,dns,filter,spoof",
         ]);
    } catch(ValidationException $validation) {
        return redirect()->back();
    }
  }

【讨论】:

  • 我会尝试这个解决方案并返回结果
  • 成功了吗?您是否还尝试抛出该异常以完全确定它是否按预期工作?
  • 它确实有效,我刚刚在 2022 年 4 月尝试过。但是对于 DNS 部分,ti 仅检查该域是否存在,如果帐户不存在,则仍然通过,但是,总比没有或复杂的正则表达式好。
【解决方案2】:

如果可以为用户一对一检查,为什么还要在这种情况下花费资源进行验证?

Route::get('/candidate/reset-password/{user}/{email}', [
   'as'    => 'candidate.reset.password',
   'uses'  => 'CandidateSmdnContoller@sendCanResLink'
]);

public function sendCanResLink(Request $request, User $user, $email) 
{
   if($user->email !== $email) return 'some error';

   // reset code here

   return 'ok'; 
}

2) 使用验证器

public function sendCanResLink(Request $request, $id, $email) 
{
   Validator::make(compact('email'), [
       'email' => ['required', 'string', 'regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/', 'max:255', 'unique:YOUR_TABLE']
   ])->validate();
  // auto redirect back if error and use 
  // @error('email') {{ $message }} @enderror in blade 
}

【讨论】:

  • 实际上我也在更新电子邮件,这里最新的邮件尚未更新但已添加到表单中,因此直接从表单中发送电子邮件。
  • @always-a-learner 我根据需要添加了第二种方法。他仍然检查数据库中的唯一性
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2020-12-29
  • 2020-03-18
  • 2020-05-26
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多