Laravel: Comment puis-je changer le nom du champ Mot de passe d'authentification par défaut
Je travaille actuellement sur mon premier projet laravel et je suis confronté à un problème.
Si vous avez de l'expérience avec laravel vous savez probablement qu'en appelant php artisan make:auth
vous obtiendrez un mécanisme prédéfini qui gère la connexion et l'enregistrement.
Ce mécanisme est configuré pour comprendre quelques mots couramment utilisés afin d'automatiser l'ensemble de la procédure.
Le problème qui se produit dans mon cas est que j'utilise Oracle db et qu'il ne me laissera pas de colonne de table avec le nom de password
car c'est un mot-clé système et il génère des erreurs lors de la tentative d'insertion d'un utilisateur.
Jusqu'à présent, j'ai essayé de changer ma colonne password
en passwd
et cela a fonctionné dans mon formulaire d'inscription comme prévu. La ligne Utilisateur a été correctement insérée et ma page a été redirigée vers/home.
Mais lorsque j'essaie de me déconnecter puis de me reconnecter, j'obtiens cette erreur me disant que mes informations d'identification ne sont pas correctes.
Quant à mon code, j'ai changé mon RegisterController.php
pour qu'il prenne le nom d'utilisateur au lieu de l'email
protected function validator(array $data)
{
return Validator::make($data, [
'username' => 'required|max:50|unique:ECON_USERS',
'passwd' => 'required|min:6|confirmed',
]);
}
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'passwd' => bcrypt($data['passwd'])
]);
}
L'utilisateur $ remplissable
protected $fillable = [
'username', 'passwd'
];
Je suppose qu'Auth essaie de s'authentifier avec email
et non username
ou qu'Auth recherche password
et non passwd
Pour avoir username
au lieu de email
, vous pouvez remplacer sername () dans votre LoginController.php
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'username';
}
Et pour passwd
au lieu de password
, vous pouvez définir un accesseur dans votre App\User.php
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->passwd;
}
login.blade.php : remplacez email
entrée par username
mais faites not changez le nom de l'entrée pour password
.
Dans le app/Http/Controllers/Auth/LoginController
remplacer la classe par défaut en ajoutant:
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required', 'passwd' => 'required',
]);
}
N'oubliez pas d'ajouter use Illuminate\Http\Request;
Il se peut que vous deviez aussi l'ajouter à votre LoginController
.
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return $request->only($this->username(), 'passwd');
}
Ça devrait le faire.
Utilisez ceci. C'est du travail pour moi.
Jusqu'à présent, j'ai changé le User.php
public function getAuthPassword(){
return $this->senha;
}
et
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
Également sur LoginController.php
public function username()
{
return 'usuario';
}
Dans Laravel 5.7 à côté de la réponse ci-dessus, vous devez changer la classe EloquentUserProvider. Recherchez dans le fichier le mot de passe 'Word' dans les lignes (107,117 et 140) vous avez trouvé le mot de passe 'Word' et changez-le avec un nouveau nom , et ce n'est que de la solustion.
- Dans le modèle utilisateur, ajoutez cette méthode:
public function getAuthPassword(){ return $this->new_password_name; }
- Dans LoginController, ajoutez ceci:
protected function validateLogin(Request $request){ $this->validate($request, [ $this->username() => 'required', 'new_password_name' => 'required', ]); } protected function credentials(Request $request) { return $request->only($this->username(), 'new_password_name'); } public function username() { return 'new_username';//or new email name if you changed }
- Dans login.blade.php, changez l'identifiant et le nom de l'élément html.
- Dans la classe EloquentUserProvider à l'intérieur de la fonction
validateCredentials
etretrieveByCredentials
changez le mot de passe 'mot de passe' avec le nouveau nom.
Edit: Je change la classe EloquentUserProvider
mais si vous pensez que changer la classe laravel est une mauvaise pratique, vous pouvez créer un fournisseur personnalisé et remplacer la retrieveByCredentials
et validateCredentials
fonctions dans le fournisseur personnalisé.