2017-10-05 4 views
2

私は新しくLaravel 5.5をインストールし、ログイン機能を使用しようとしています。私はカスタムフィールドを使ってログインしています。 user_nameとuser_passwordです。私が提出するとき私は得るLaravel 5.5電子メールとパスワードのフィールドが必要です

  • 電子メールフィールドは必須です。
  • パスワードフィールドは必須です。

が、あなたはアプリ/ User.phpに行かなければならない私のフィールドは、ユーザーテーブルに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()。あなただけのカスタムユーザ名フィールドに望んでいた場合、あなたはLoginControllerクラスのusername()メソッド上書きすることができます:

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

をしかし、あなたはカスタムユーザ名フィールド名とパスワードのフィールド名の両方にしたいから、私はあなたが上書きすることを示唆していますLoginControllerクラスのvalidateLogin()方法:

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

希望に役立ちます。

+0

私はLoginControllerでvalidateLoginオーバーライドを試みましたが、私はまだ同じエラーが発生しています。 – user8689892

+0

型エラー:App \ Http \ Controllers \ Auth \ LoginController :: validateLogin()に渡された引数1は、App \ Http \ Controllers \ Auth \ Requestのインスタンスでなければなりません(Illuminate \ Http \ Requestのインスタンス)エラー: – user8689892

+0

ログイン中**これらの認証情報は私たちの記録と一致しません。**訳注:私は、エラーが表示されます。私はLaravelがbycrptをパスワードとして使うことを知っています。私もパスワードを変換しました。私が行方不明のものは何ですか? – user8689892

0

と変更

それはあなたの問題を解決します

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

から210

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

。しかし、あなたのビューフォームフィールドをuser_name、user_passwordの代わりに電子メール、パスワードに変更することを提案しなければなりません。

+0

あなたはここで物事を混ぜていると思います。 '$ fillable'メンバ変数は、一括割り当て可能な属性を定義します([Mass Assignment](https://laravel.com/docs/5.5/eloquent#mass-assignment))。 HTMLのフォームのフィールド名とテーブルの列名は完全に独立しています。 – louisfischer

関連する問題