Modifica il modulo di authorization esistente (email al nome utente)

Vorrei modificare il modulo di authorization esistente fornito da Laravel 5, invece di chiedere l’ emailemail chiederà il campo del username nel database.

Laravel cerca nella variabile $ username nel file:

Illuminare \ Foundation \ Auth \ AuthenticatesUsers

 public function loginUsername() { return property_exists($this, 'username') ? $this->username : 'email'; } 

Come puoi vedere, per impostazione predefinita verrà chiamato ’email’.

Tuttavia puoi sostituirlo con AuthController aggiungendo:

 protected $username = 'username'; 

Non è necessario modificare il modulo Auth per farlo, basta semplicemente passare l’identificatore dell’utente nel tentativo. Utilizzare il nome del campo nell’array di prova come tale:

 if (Auth::attempt(['username' => $username, 'password' => $password])) { return redirect()->intended('dashboard'); } 

Puoi provare a controllare il file Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers solo per avere l’idea.

Quindi aggiungi un override di postLogin sul tuo AuthController :

 public function postLogin(Request $request) { $this->validate($request, [ 'username' => 'required', 'password' => 'required', ]); $credentials = $request->only('username', 'password'); if ($this->auth->attempt($credentials, $request->has('remember'))) { return redirect()->intended($this->redirectPath()); } return redirect($this->loginPath()) ->withInput($request->only('username', 'remember')) ->withErrors([ 'username' => 'These credentials do not match our records.', ]); } 

È inoltre necessario aggiungere l’ use Illuminate\Http\Request; al tuo AuthController .

puoi semplicemente sovrascrivere la funzione di nome utente auth da LoginController.php in laravel 5.3

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

in controller \ auth \ logincontroller aggiungilo

  protected $username = 'user_name';//user_name field name 

quindi vai a Illuminate \ Foundation \ Auth \ AuthenticatesUsers e cambia

  public function username() { return 'email';//change this with "return $this->username;" } 

con questo metodo È ansible avere un tipo di accesso diverso in controller diversi, ad esempio in altri controller controller \ admin_auth \ logincontroller

 protected $username = 'phone_number';