我想在没有密码的情况下登录wordpress用户。这就是我要的。
假设用户访问http://example-site.com/6789098765678.php
并在页面上输入他的用户名,他将自动登录而无需密码。
我尝试了一些像wp_set_auth_cookie
这样的东西,但我不知道放在哪里。我来自Ruby on Rails背景,并且对PHP知之甚少。
我知道这种行为并不安全。这是一个特定的用例。
答案 0 :(得分:3)
我在评论中发布的答案,您可以通过以下方式使用它。
你需要做的是做到这一点。为wordpress函数创建ajax hooks
,我们将仅使用用户名登录用户,并使用jQuery ajax调用该函数。
这里要做的第一步是:wp-content/themes/your_theme_name/
并打开名为functions.php
的文件,然后在文件末尾添加以下代码。
function username_login(){
// Automatic login //
$username = $_POST['username'];
$user = get_user_by('login', $username );
// Redirect URL //
if ( !is_wp_error( $user ) )
{
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID );
wp_set_auth_cookie ( $user->ID );
$redirect_to = user_admin_url();
echo json_encode(array('error_code'=>0));
exit();
} else {
echo json_encode(array('error_code'=>1));
exit();
}
exit();
}
add_action('wp_ajax_username_login','username_login');
add_action('wp_ajax_nopriv_username_login','username_login');
如您所见,我们使用add_action
函数从ajax控制器挂钩到username_login
函数,详细了解wordpress hooks here
我们需要的下一步是对我们创建的函数进行ajax调用并进行用户登录,然后在用户登录时刷新站点。您需要使用以下代码将请求发送到用于登录用户的Wordpress。将以下代码添加到footer.php文件中,该文件位于wp-content/themes/your_theme_name/
内并打开footer.php
:
jQuery('#username_login').on('submit',function(e){
e.preventDefault();
var data = $(this).serializeArray();
data.push({ name:'action',value:'username_login' });
$.ajax({
url:"<?php echo admin_url('admin-ajax.php'); ?>";,
type: 'POST',
dataType: 'json',
data:data,
success:function(response){
if(response.error_code == 1){
alert('user cannot login')
} else {
alert('user logged in');
location.reload();
}
}
});
});
正如您在上面的javascript代码中看到的,我们有一个名为username_login
的表单选择器,我们现在需要做的是创建一个标识为username_login
的表单元素,在其中我们需要创建一个名为username
的输入,按钮类型为submit
:
<form id="username_login">
<input type="text" name="username" placeholder="Your username..." required/>
<button type="submit" name="submit">Login</button>
</form>
现在你拥有了所有这些,这将如何与这个流程一起工作? 。好吧,当用户输入用户名并点击Login时,ajax请求将被发送到url:yoursite.com/wp-admin/admin-ajax.php?action=username_login
,参数名为action
,当用户登录站点时,将刷新为用户登录后,用户可以正常访问普通用户的功能,没有任何问题。