dans l'admin ProcessWire vous ne pouvez vous connecter en utilisant votre nom (nom d'utilisateur) mais comme j'utilise l'e-mail de connexion à l'avant Je veux aussi utiliser le courrier électronique pour le backend. Comment puis-je modifier le formulaire de connexion admin pour autoriser l'adresse e-mail?ProcessWire: Permet aux utilisateurs de se connecter en utilisant e-mail ou nom au lieu du nom
0
A
Répondre
1
Voici la solution que je suis venu avec
j'ai placé ces crochets dans mon site/fichier init.php
// change login name input label to e-mail-address
$wire->addHookAfter('ProcessLogin::buildLoginForm', function(HookEvent $event) {
// on liner as we don't change anything else
$event->return->get('login_name')->set('label', $event->_('E-Mail-Address'));
});
// hook into session::login to get user by mail
$wire->addHookBefore('Session::login', function(HookEvent $event) {
// need to get email from $input as processLogin::execute is pageName sanitizing
$email = $event->input->post->email('login_name');
// stop here if login_name not a valid email
if (!$email) return;
// new selector arrays don't seem to work on $user so using $pages here
$user = $event->pages->get([['email', $email]]);
// if valid user set login name argument
if ($user->id) $event->setArgument('name', $user->name);
});
nue à l'esprit que l'e-mail n'est pas un champ unique, donc si vous n'assure pas l'unicité des adresses e-mail cela ne fonctionnera pas, vous pouvez le changer un peu pour surmonter cela ..
Jetez un oeil à https://processwire.com/talk/topic/1838-login-using-e-mail-rather-than-username-and-general-login-issues/ où Ryan publie plus d'infos à ce sujet et des solutions possibles dans le cas d'adresses e-mail en double et https://processwire.com/talk/topic/1716-integrating-a-member-visitor-login-form/ pour en savoir plus sur les stratégies de connexion frontale
Faites attention à utiliser $ email comme sélecteur sans le désinfecter au préalable. Aussi, voici ma version de ceci: https://processwire.com/talk/topic/1716-integrating-a-member-visitor-login-form/?page=4#comment-89616 qui vérifie si le nom entré est en fait une adresse mail avant de traiter le hook. – adrian
'$ email = $ event-> input-> post-> email ('login_name');' est-ce que l'e-mail désinfecte la valeur? mélange WireInput et Sanitizer – Can