如何在没有密码的情况下登录WordPress用户


How do I log wordpress users without password

我想在没有密码的情况下登录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,当用户登录网站时,用户登录时将刷新,然后用户可以毫无问题地访问普通用户的功能。