в Администраторе ProcessWire вы можете войти в систему только под своим именем (именем пользователя), но, поскольку я использую вход в систему электронной почты на входе, я хочу использовать электронную почту и для бэкенда.
Как я могу изменить форму входа администратора, чтобы разрешить использование адреса электронной почты?
Вот решение, которое я придумал
Я поместил эти хуки в мой файл site / 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);
});
помните, что электронная почта не является уникальным полем, поэтому, если вы не обеспечите уникальность адресов электронной почты, это не сработает, вы можете немного изменить ее, чтобы преодолеть это…
Посмотри на https://processwire.com/talk/topic/1838-login-using-e-mail-rather-than-username-and-general-login-issues/ где Райан публикует дополнительную информацию об этом и возможных решениях в случае дублирования адресов электронной почты
а также https://processwire.com/talk/topic/1716-integrating-a-member-visitor-login-form/ для получения дополнительной информации о стратегиях входа в систему
Других решений пока нет …