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?
7 Réponses :
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'], ]); }
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', ]; }
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.
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.
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.
Super, c'est la meilleure solution que j'ai trouvée.
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>
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éé.
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.
Commencez par aller à PasswordBroker.php[ Allez à la ligne 176 et changez ici Ensuite allez ResetsPasswords.php Allez à la ligne 69 et modifiez ici Merci. .. Il fonctionne sur laravel 5.8 'password' => 'required|confirmed|min:**degit you chose in **PasswordBroker.php****',
vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords.php
return $password === $confirm && mb_strlen($password) >= **any digit you want**;
vendor\laravel\framework\src\Illuminate\Auth\Passwords\PasswordBroker.php
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.
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