Vorrei modificare il modulo di authorization esistente fornito da Laravel 5, invece di chiedere l’ email
– email
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';