2
votes

comment résoudre l'erreur "Les mots de passe doivent comporter au moins huit caractères et correspondre à la confirmation." dans laravel 5.8

lorsque je tape l'e-mail et le mot de passe et que je clique sur réinitialiser le mot de passe, si le mot de passe est inférieur à 3 caractères, une erreur indique que le mot de passe doit contenir au moins 3 caractères, mais si je tape un mot de passe de plus de 3 caractères , il affiche une erreur dans l'entrée de l'e-mail indiquant que les mots de passe doivent comporter au moins huit caractères et correspondre à la confirmation, et le mot de passe est confirmé et correspond à la confirmation.

et comment résoudre ce problème pour réinitialiser le mot de passe avec succès sans afficher les mots de passe doivent comporter au moins huit caractères et correspondre à la confirmation?


2 commentaires

avez-vous vérifié que vous avez atteint la même fonction que vous vouliez?


oui dans / vendor la fonction rules définit yla validation, et si je change le min en min: 4 ça marche


7 Réponses :


0
votes

vous pouvez remplacer la méthode du validateur comme ci-dessous.

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'password' => ['required', 'string', 'min:3', 'confirmed'],
    ]);
}


0 commentaires

-1
votes

Allez dans project_folder\smt\vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php

Modifiez la méthode rules () comme que vous voulez.

    /**
     * Get the password reset validation rules.
     *
     * @return array
     */
    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:6',
        ];
    }


2 commentaires

c'est ce que j'ai fait et j'ai dit que lorsque je tape par exemple un mot de passe de moins de 6, il dit qu'il fait plus que 6 ou 6, mais si je tape 7, il dit `` Les mots de passe doivent contenir au moins huit caractères et correspondre à la confirmation ''


Vous ne devez jamais modifier les informations du fournisseur. Le compositeur sera en colère.



0
votes

merci à tous, la solution était:

Ce que vous recherchez est dans cette classe:

\ Illuminate \ Auth \ Passwords \ PasswordBroker et cette fonction

validatePasswordWithDefaults Cela semble un peu étrange que 8 soit codé en dur dans cette fonction. Je suppose qu'il y a probablement de meilleures pratiques pour changer cela. Vous pourriez peut-être annuler la fonction de votre contrôleur. Essayez cela aussi.


0 commentaires

3
votes

Ajoutez simplement la méthode rules () , dans Auth \ ResetPasswordsController.php après construct():

public function rules()
{
    return [
      'password' => ['required', 'min:5', 'confirmed']

    ];
}

Voici la capture d'écran , cliquez sur moi.

Et, s'il vous plaît, gardez à l'esprit, jamais modifier le fournisseur / les fichiers.


1 commentaires

Super, c'est la meilleure solution que j'ai trouvée.



2
votes

Il est codé en dur dans laravel 5.8. Pour résoudre ce problème, vous devrez remplacer certaines classes.

1.) Créez un CustomPasswordResetServiceProvider dans App \ Providers

Vous devez créer un nouveau CustomPasswordResetServiceProvider que nous utiliserons pour remplacer le PasswordResetServiceProvider

<?php

namespace App\Services;

use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;

class CustomPasswordBroker extends BasePasswordBroker
{
    /**
     * Determine if the passwords are valid for the request.
     *
     * @param array $credentials
     *
     * @return bool
     */
    protected function validatePasswordWithDefaults(array $credentials)
    {
        $minPassLength = 6;

        [$password, $confirm] = [
            $credentials['password'],
            $credentials['password_confirmation'],
        ];

        return $password === $confirm && mb_strlen($password) >= $minPassLength;
    }
}

2.) Remplacer le fournisseur de services dans app / config. php

Ensuite, nous devons remplacer le ServiceProvider nouvellement créé dans notre app / config.php

Ouvrez votre fichier app / config.php et commentez PasswordResetServiceProvider et ajoutez nouvelle classe ServiceProvider.

    protected function resolve($name)
    {
        $config = $this->getConfig($name);

        if (is_null($config)) {
            throw new InvalidArgumentException("Password resetter [{$name}] is not defined.");
        }

        return new CustomPasswordBroker(
            $this->createTokenRepository($config),
            $this->app['auth']->createUserProvider($config['provider'] ?? null)
        );
    }

3.) Créer une nouvelle classe CustomPasswordBrokerManager

Créer une nouvelle classe CustomPasswordBrokerManager et sous le répertoire App / Services et copiez tout le contenu de PasswordBrokerManager qui se trouve dans Illuminate\Auth\Passwords\PasswordBrokerManager.php

Puis a modifié la fonction résoudre pour renvoyer un instance de ma classe CustomPasswordProvider

//Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,

App\Providers\CustomPasswordResetServiceProvider::class,

4. Créer CustomPasswordBroker

Enfin, vous pouvez maintenant créer votre nouvelle classe CustomPasswordBroker sous le répertoire App / Services qui étend la classe PasswordBroker par défaut située dans Illuminate \ Auth \ Passwords \ PasswordBroker

<?php

namespace App\Providers;

use App\Services\CustomPasswordBrokerManager;
use Illuminate\Support\ServiceProvider;

class CustomPasswordResetServiceProvider extends ServiceProvider
{
    protected $defer = true;

    public function register()
    {
        $this->registerPasswordBrokerManager();
    }

    public function provides()
    {
        return ['auth.password'];
    }

    protected function registerPasswordBrokerManager()
    {
        $this->app->singleton('auth.password', function ($app) {
            return new CustomPasswordBrokerManager($app);
        });
    }
}

Maintenant, vous pouvez remplacer les fonctions dont vous avez besoin. La plupart du temps, vous devrez commencer votre modification avec la fonction sendResetLink , puis vous pourrez la poursuivre à partir de là.

crédit: https://www.5balloons.info/extending-passwordbroker-class-laravel-5/

p>


0 commentaires

2
votes

J'ai trouvé simple et bref résoudre ce problème ici PasswordBroker a un code en dur longueur minimale du mot de passe de 8 caractères (le remplacement de ResetsPasswords :: rules () n'a aucun effet)

Vous pouvez trouver la raison pour laquelle il a été créé.


1 commentaires

pour ceux qui recherchent la réponse écrite pour corriger la validation de mot de passe codé en dur, cette solution est la meilleure et nécessite un minimum d'effort et sa manière propre de le faire.



-3
votes

Commencez par aller à PasswordBroker.php[

'password' => 'required|confirmed|min:**degit you chose in **PasswordBroker.php****',

Allez à la ligne 176 et changez ici

vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php

Ensuite allez ResetsPasswords.php

return $password === $confirm && mb_strlen($password) >= **any digit you want**;

Allez à la ligne 69 et modifiez ici

vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php

Merci. .. Il fonctionne sur laravel 5.8


1 commentaires

Les gens votent contre parce que la règle de Laravel numéro 1: ne changez rien dans le répertoire / vendor. Ces fichiers sont mis à jour lorsque vous exécutez l'installation ou la mise à jour de composer.