Php Laravel unique电子邮件验证无法在mongodb中处理不同的字符大小写
我有一个具有唯一电子邮件验证的注册表。当我输入不同的字符大小写时,电子邮件不会应用唯一验证Php Laravel unique电子邮件验证无法在mongodb中处理不同的字符大小写,php,laravel-5,laravel-5.5,Php,Laravel 5,Laravel 5.5,我有一个具有唯一电子邮件验证的注册表。当我输入不同的字符大小写时,电子邮件不会应用唯一验证 example@gmail.com, Example@gmail.com, eXample@gmail.com:Laravel唯一验证失败 example@gmail.com, example@gmail.com, example@gmail.com:Laravel唯一验证成功 请检查下面的代码并更正。电子邮件在数据库中以小写形式存储 DB-Mongodb 框架-Laravel 5.5 Register
example@gmail.com, Example@gmail.com, eXample@gmail.com
:Laravel唯一验证失败
example@gmail.com, example@gmail.com, example@gmail.com
:Laravel唯一验证成功
请检查下面的代码并更正。电子邮件在数据库中以小写形式存储
DB-Mongodb
框架-Laravel 5.5
RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
public function message()
{
return 'The :attribute must be lowercase.';
}
use App\Rules\Lowercase;
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => [ 'required', 'string', 'email', 'max:255', 'unique:user,usrEmail', new Lowercase ],
'password' => 'required|string|min:6|confirmed',
'dataProtection' => 'required',
'termsService' => 'required',
]);
}
protected function validator(array $data)
{
$data['email'] = strtolower($data['email']);
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
User.php(模型)
在laravel自定义验证规则的帮助下,我解决了这个问题 我使用php artisan命令
php artisan make:rule Lowercase
创建了一个新规则,并定义了该规则
app/Rules/Lowercase.php
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
public function message()
{
return 'The :attribute must be lowercase.';
}
use App\Rules\Lowercase;
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => [ 'required', 'string', 'email', 'max:255', 'unique:user,usrEmail', new Lowercase ],
'password' => 'required|string|min:6|confirmed',
'dataProtection' => 'required',
'termsService' => 'required',
]);
}
protected function validator(array $data)
{
$data['email'] = strtolower($data['email']);
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
我已将规则对象附加到其他规则
RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
public function message()
{
return 'The :attribute must be lowercase.';
}
use App\Rules\Lowercase;
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => [ 'required', 'string', 'email', 'max:255', 'unique:user,usrEmail', new Lowercase ],
'password' => 'required|string|min:6|confirmed',
'dataProtection' => 'required',
'termsService' => 'required',
]);
}
protected function validator(array $data)
{
$data['email'] = strtolower($data['email']);
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
注册用户输入电子邮件时,系统将提醒用户使用小写字母
我不确定这是不是一个好方法 在验证之前,您可以使用strtolower($data['email']) RegisterController.php
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
public function message()
{
return 'The :attribute must be lowercase.';
}
use App\Rules\Lowercase;
protected function validator(array $data)
{
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => [ 'required', 'string', 'email', 'max:255', 'unique:user,usrEmail', new Lowercase ],
'password' => 'required|string|min:6|confirmed',
'dataProtection' => 'required',
'termsService' => 'required',
]);
}
protected function validator(array $data)
{
$data['email'] = strtolower($data['email']);
return Validator::make($data, [
'firstName' => 'required|string|max:255',
'lastName' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:user,usrEmail',
'password' => 'required|string|min:6|confirmed',
]);
}
我知道你已经解决了这个问题,但我确实想提出两种可能的替代方案 对于这种方法,您将创建一个自定义表单请求(就像您所做的那样),并执行如下操作:
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}
<?php
namespace App\Http\Middleware;
use Closure;
class CheckEmail
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->someIsUniqueChecker($request->email)) {
return redirect()->back()->withErrors($someErrors);
}
return $next($request);
}
}
在这里,您可以将电子邮件转换为小写,并将其与数据库进行比较。这样,您就不必依赖用户重新输入电子邮件。如果电子邮件不是唯一的,您只需返回到有错误的用户。简而言之,这允许您执行额外的验证
?
第二种方法,可能不是正确的方法,是使用自定义中间件。我看不出你为什么不能设置这样的东西:
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}
<?php
namespace App\Http\Middleware;
use Closure;
class CheckEmail
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->someIsUniqueChecker($request->email)) {
return redirect()->back()->withErrors($someErrors);
}
return $next($request);
}
}
我有最简单的解决方案,可以在Laravel中修复MySql中唯一的电子邮件问题
只需使用以下查询使您的字段唯一即可:
ALTER TABLE `users` ADD UNIQUE(`email`);
这解决了我的大小写敏感和独特的问题,不需要在任何控制器和模型脚本中进行任何更改。感谢您提出这个问题。请尝试仅使用'email'=>“必需”| email |唯一:user,usrEmail',
@Pyton,Not working尝试将$data['email']
转换为小写。可能这是区分大小写的问题。你有用户
表还是用户
表?@Pyton我已经应用了laravel功能变量,因此,当用户注册电子邮件时,将存储为小写。我不认为要求用户将其电子邮件设置为小写有什么意义。。但是,我们可能会在客户端js中自动执行此操作。这正是我所需要的。非常感谢。通过这种方式,它可以在用户将其帐户输入系统之前强制执行。这样用户就知道会发生什么。