Laravel 5.5 电子邮件和密码字段是必需的
Laravel 5.5 The email and password field is required
我是新手并已安装 Laravel 5.5,正在尝试使用登录功能。我正在使用自定义字段登录; user_name 和 user_password。当我提交时,我得到
- 电子邮件字段是必需的。
- 密码字段是必需的。
但是我的字段在用户 table
中是 user_name 和 user_password
登录控制器
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectAfterLogout = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
/**
* Logout, Clear Session, and Return.
*
* @return void
*/
public function logout()
{
$user = Auth::user();
Log::info('User Logged Out. ', [$user]);
Auth::logout();
Session::flush();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
protected function getCredentials(Request $request){
return $request->only('user_name', 'user_password');
}
}
查看
@extends('layouts.app')
@section('content')
<div class="container">
<div>
<a class="hiddenanchor" id="signup"></a>
<a class="hiddenanchor" id="signin"></a>
<div class="login_wrapper">
<div class="animate form login_form">
<section class="login_content">
<form class="form-horizontal" role="form" method="POST" action="{{ route('login') }}">
{{ csrf_field() }}
<h1>Login Form</h1>
<div>
<input id="email" type="email" class="form-control" name="user_name" value="{{ old('user_name') }}" required autofocus>
</div>
<div>
<input id="password" type="password" class="form-control" name="user_password" required>
</div>
<div>
<button type="submit" name="login" class="btn btn-default submit">Log in</button>
<a class="reset_pass" href="#">Lost your password?</a>
</div>
<div class="clearfix"></div>
<div class="separator"></div>
</form>
</section>
</div>
</div>
</div>
您必须前往 app/User.php 并更改
protected $fillable = [
'name', 'email', 'password',
];
到
protected $fillable = [
'name', 'user_email', 'user_password',
];
它将解决您的问题。但我必须建议您将视图表单字段更改为电子邮件、密码而不是 user_name、user_password
您正在使用特征 AuthenticatesUsers
,它负责在用户提交表单后验证数据。如果你看一下这个文件,你会看到这个方法:
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
]);
}
更具体地说,如您所见,此方法负责在字段名称 "password" 上通过方法 username()
调用验证程序。如果只想自定义用户名字段,可以覆盖 LoginController
class:
中的 username()
方法
public function username()
{
return 'user_name';
}
但是既然你想自定义用户名字段名和密码字段名,我建议你覆盖LoginController
中的validateLogin()
方法 class:
protected function validateLogin(Request $request)
{
$this->validate($request, [
'user_name' => 'required|string',
'user_password' => 'required|string',
]);
}
希望对您有所帮助。
我是新手并已安装 Laravel 5.5,正在尝试使用登录功能。我正在使用自定义字段登录; user_name 和 user_password。当我提交时,我得到
- 电子邮件字段是必需的。
- 密码字段是必需的。
但是我的字段在用户 table
中是 user_name 和 user_password登录控制器
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectAfterLogout = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
/**
* Logout, Clear Session, and Return.
*
* @return void
*/
public function logout()
{
$user = Auth::user();
Log::info('User Logged Out. ', [$user]);
Auth::logout();
Session::flush();
return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
protected function getCredentials(Request $request){
return $request->only('user_name', 'user_password');
}
}
查看
@extends('layouts.app')
@section('content')
<div class="container">
<div>
<a class="hiddenanchor" id="signup"></a>
<a class="hiddenanchor" id="signin"></a>
<div class="login_wrapper">
<div class="animate form login_form">
<section class="login_content">
<form class="form-horizontal" role="form" method="POST" action="{{ route('login') }}">
{{ csrf_field() }}
<h1>Login Form</h1>
<div>
<input id="email" type="email" class="form-control" name="user_name" value="{{ old('user_name') }}" required autofocus>
</div>
<div>
<input id="password" type="password" class="form-control" name="user_password" required>
</div>
<div>
<button type="submit" name="login" class="btn btn-default submit">Log in</button>
<a class="reset_pass" href="#">Lost your password?</a>
</div>
<div class="clearfix"></div>
<div class="separator"></div>
</form>
</section>
</div>
</div>
</div>
您必须前往 app/User.php 并更改
protected $fillable = [
'name', 'email', 'password',
];
到
protected $fillable = [
'name', 'user_email', 'user_password',
];
它将解决您的问题。但我必须建议您将视图表单字段更改为电子邮件、密码而不是 user_name、user_password
您正在使用特征 AuthenticatesUsers
,它负责在用户提交表单后验证数据。如果你看一下这个文件,你会看到这个方法:
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required|string',
'password' => 'required|string',
]);
}
更具体地说,如您所见,此方法负责在字段名称 "password" 上通过方法 username()
调用验证程序。如果只想自定义用户名字段,可以覆盖 LoginController
class:
username()
方法
public function username()
{
return 'user_name';
}
但是既然你想自定义用户名字段名和密码字段名,我建议你覆盖LoginController
中的validateLogin()
方法 class:
protected function validateLogin(Request $request)
{
$this->validate($request, [
'user_name' => 'required|string',
'user_password' => 'required|string',
]);
}
希望对您有所帮助。