2017-10-05 196 views
2

我是新手,并且安装了Laravel 5.5并尝试登录功能。我正在使用自定义字段进行登录; user_name和user_password。当我提交时我得到Laravel 5.5电子邮件和密码字段是必填项

  • 电子邮件字段是必填项。
  • 密码字段是必需的。

,但我的领域是在user表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> 

回答

1

您正在使用特征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', 
    ]); 
} 

更具体地讲,你可以看到,这个方法负责调用验证器上的字段名“密码”,并通过该方法username()

public function username() 
{ 
    return 'user_name'; 
} 

但既然你想定制两个用户名字段名和密码字段名,我建议你覆盖:如果你只是想自定义的用户名场,你可以在LoginController类覆盖username()方法validateLogin()方法在LoginController类:

protected function validateLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'user_name' => 'required|string', 
     'user_password' => 'required|string', 
    ]); 
} 

希望有所帮助。

+0

我只在我的LoginController中尝试了validateLogin覆盖,我仍然得到相同的错误。 – user8689892

+0

而不是获得'“类型错误:参数1传递给App \ Http \ Controllers \ Auth \ LoginController :: validateLogin()必须是App \ Http \ Controllers \ Auth \ Request的一个实例,给出Illuminate \ Http \在第31行中输入E:\ xampp \ htdocs \ laravelAuth \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Auth \ AuthenticatesUsers.php◀“'error – user8689892

+0

在登录中**这些凭据与我们的记录不匹配。错误出现。我知道Laravel使用bycrpt来输入密码;我也转换了我的密码。我错过了什么? – user8689892

0

你必须去应用程序/ user.php的和变更

protected $fillable = [ 
    'name', 'email', 'password', 
]; 

protected $fillable = [ 
    'name', 'user_email', 'user_password', 
]; 

这将解决您的问题。但我必须建议您将您的视图表单字段更改为电子邮件,密码而不是user_name,user_password

+0

我想你是在这里混合的东西。 '$ fillable'成员变量定义了可以进行批量赋值的属性([Mass Assignement](https://laravel.com/docs/5.5/eloquent#mass-assignment))。 HTML中的表单字段名称和表列名称是完全独立的。 – louisfischer