web-dev-qa-db-fra.com

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. Register

Success

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. enter image description here

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

14
D.Intziadis

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.

22
Gaurav

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.

2
Dimitri Mostrey

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';
}
1
Fernando Aires

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 et retrieveByCredentials 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é.

0
Niyaz