我想在没有密码的情况下登录wordpress用户。这就是我想要的。假设用户访问http://example-site.com/6789098765678.php
并且他将在页面上输入他的用户名,他将自动登录而无需密码。
我已经尝试了一些东西,比如wp_set_auth_cookie
,但我不知道放在哪里。我来自Ruby on Rails背景,对PHP的了解非常少。
我知道这种行为不安全。这是一个特定的用例。
我在评论中发布的答案,您可以通过以下方式使用它。
你需要使这成为可能的是。为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钩子的更多信息
我们在这里需要的下一步是对我们已经创建的函数进行 ajax 调用,让用户登录,然后在用户登录时刷新站点。您需要的是使用以下代码将请求发送到Wordpress以登录用户。将以下代码添加到页脚.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
的表单选择器,我们现在需要做的是创建一个id 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>
现在您已经拥有了所有内容,这将如何与此流程一起使用?.好吧,当用户输入用户名并点击登录时,ajax请求将被发送到url:yoursite.com/wp-admin/admin-ajax.php?action=username_login
,参数称为action
,当用户登录网站时,用户登录时将刷新,然后用户可以毫无问题地访问普通用户的功能。