在 Laravel 中验证没有电子邮件的用户
Posted
技术标签:
【中文标题】在 Laravel 中验证没有电子邮件的用户【英文标题】:Authenticate users without email in Laravel 【发布时间】:2017-05-18 02:21:05 【问题描述】:我正在尝试在用户注册时将电子邮件设为可选。这里是package。所以我在这个函数中删除了email' => 'required|email|unique:users',
:
public function signup(Request $request)
$credentials = $request->all();
$validator = Validator::make($credentials, [
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|confirmed',
'password_confirmation' => 'required|min:3'
]);
if ($validator->fails())
throw new ValidationHttpException($validator->errors()->all());
try
$user = $this->users->create($request->except('roles', 'permissions'));
if (!$user->id)
return $this->response->error('could_not_create_user', 500);
$hasToReleaseToken = Config::get('boilerplate.signup_token_release');
if ($hasToReleaseToken)
return $this->login($request);
return $this->response->created();
catch (\Exception $e)
return $this->response->error($e->getMessage(), 500);
然后在 config-boilerplate.php 我还删除了电子邮件:
'signup_fields_rules' => [
'name' => 'required',
'email' => 'required|email|unique:users',///// this
'password' => 'required|min:6'
],
但是当我注册时,我得到了这个错误:
"message": "未定义索引:电子邮件", “状态码”:500, “调试”: “线”:173, “文件”:“/Users/MyMac/Desktop/Project/laravel-5.3-boilerplate-api-jwt-vue2/vendor/dingo/api/src/Http/Response/Factory.php”, "class": "Symfony\Component\HttpKernel\Exception\HttpException",
路线:
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api)
$api->post('auth/signup', 'App\Api\V1\Controllers\AuthController@signup');
我需要禁用什么来允许用户使用或不使用电子邮件进行注册吗?
【问题讨论】:
只是出于好奇,如果用户没有电子邮件,他们将如何登录?基本上,您打算如何在注册过程之后对它们进行身份验证? 我已经用电话号码@kyle 创建了一个登录方法 您的 SignupController 不同于 github.com/francescomalatesta/laravel-api-boilerplate-jwt/blob/… 哎呀,原来是这个github.com/sureshamk/laravel-5.3-boilerplate-api-jwt-vue2/blob/… 【参考方案1】:如果您想将电子邮件作为可选字段,只需使用sometimes|email
参见Docs。试试下面的代码:
public function signup(Request $request)
$credentials = $request->all();
$validator = Validator::make($credentials, [
'name' => 'required',
'email' => 'sometimes|email',
'password' => 'required|min:6|confirmed',
'password_confirmation' => 'required|min:3'
]);
if ($validator->fails())
throw new ValidationHttpException($validator->errors()->all());
try
$user = $this->users->create($request->except('roles', 'permissions'));
if (!$user->id)
return $this->response->error('could_not_create_user', 500);
$hasToReleaseToken = Config::get('boilerplate.signup_token_release');
if ($hasToReleaseToken)
return $this->login($request);
return $this->response->created();
catch (\Exception $e)
return $this->response->error($e->getMessage(), 500);
config-boilerplate.php
'signup_fields_rules' => [
'name' => 'required',
'email' => 'sometimes|email',///// this
'password' => 'required|min:6'
],
【讨论】:
以上是关于在 Laravel 中验证没有电子邮件的用户的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证