ProcessWire:让用户使用电子邮件或姓名而不是仅使用姓名登录

ProcessWire: Let users login using either e-mail or name instead of only name

在 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/ Ryan 在其中发布了更多关于此问题的信息以及在电子邮件地址重复的情况下可能的解决方案 https://processwire.com/talk/topic/1716-integrating-a-member-visitor-login-form/ 了解更多关于前端登录策略的信息