Login 通过电话号码登录
我正在使用Woocommerce建立一个网站。默认情况下,用户名是用户的电子邮件地址。我想为用户提供通过电话号码登录的功能。我该怎么做?请帮忙 这是一个有趣的问题。有几件事需要考虑: 用户是否已经根据自己的帐户输入了电话号码,或者在购买时提供了电话号码? 我们是否使用计费电话号码登录? 假设这两件事都是真的,您可以连接到authenticate筛选器,搜索具有匹配billing_phone meta的用户,并返回该用户的实际用户名:Login 通过电话号码登录,login,woocommerce,Login,Woocommerce,我正在使用Woocommerce建立一个网站。默认情况下,用户名是用户的电子邮件地址。我想为用户提供通过电话号码登录的功能。我该怎么做?请帮忙 这是一个有趣的问题。有几件事需要考虑: 用户是否已经根据自己的帐户输入了电话号码,或者在购买时提供了电话号码? 我们是否使用计费电话号码登录? 假设这两件事都是真的,您可以连接到authenticate筛选器,搜索具有匹配billing_phone meta的用户,并返回该用户的实际用户名: <?php /// // Allow login v
<?php
///
// Allow login via phone number
///
function vnmAdmin_emailLogin($user, $username, $password) {
// Try logging in via their billing phone number
if (is_numeric($username)) {
// The passed username is numeric - that's a start
// Now let's grab all matching users with the same phone number:
$matchingUsers = get_users(array(
'meta_key' => 'billing_phone',
'meta_value' => $username,
'meta_compare' => 'LIKE'
));
// Let's save time and assume there's only one.
if (is_array($matchingUsers)) {
$username = $matchingUsers[0]->user_login;
}
}
return wp_authenticate_username_password(null, $username, $password);
}
add_filter('authenticate', 'vnmAdmin_loginWithPhoneNumber', 20, 3);
?>
注意:这种方法不是绝对可靠的;例如,它不会检查“登录”号码或检索到的用户元号码中是否有空格;它只是假设它找到的第一个用户就是正确的用户——如果出于任何原因,您有多个用户使用同一个电话号码,这并不理想。但话虽如此,我已经对它进行了测试,它仍然有效。函数名与@indextwo answer中add_filter callback中给出的不同。我想使用电子邮件和电话号码进行身份验证。使用@indextwo回答并得出了这个结论
///
// Allow login via phone number and email
///
function vnmAdmin_loginWithPhoneNumber($user, $username, $password) {
// Try logging in via their billing phone number
if (is_numeric($username)) {
// The passed username is numeric - that's a start
// Now let's grab all matching users with the same phone number:
$matchingUsers = get_users(array(
'meta_key' => 'billing_phone',
'meta_value' => $username,
'meta_compare' => 'LIKE'
));
// Let's save time and assume there's only one.
if (is_array($matchingUsers) && !empty($matchingUsers)) {
$username = $matchingUsers[0]->user_login;
}
}elseif (is_email($username)) {
// The passed username is email- that's a start
// Now let's grab all matching users with the same email:
$matchingUsers = get_user_by_email($username);
// Let's save time and assume there's only one.
if (isset($matchingUsers->user_login)) {
$username = $matchingUsers->user_login;
}
}
return wp_authenticate_username_password(null, $username, $password);
}
add_filter('authenticate', 'vnmAdmin_loginWithPhoneNumber', 20, 3);
嘿,付费电话号码是用户注册的必填字段。我想,用户必须能够通过他们的电子邮件或电话注册,其中任何一个都可以是他的用户名。同时我会试试你的代码,然后再给你回复。谢谢-@vkm使用这种技术,他们的用户名仍然是他们的用户名,例如indextwo,假设这是一个标准的用户注册表,但他们可以使用用户名或电话号码登录。如果这回答了你的问题,请考虑接受它: