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

Nin*_*Boy 2 php wordpress

我想在没有密码的情况下登录 wordpress 用户。这就是我要的。假设用户访问http://example-site.com/6789098765678.php并在页面上输入他的用户名,他将在没有密码的情况下自动登录。

我已经尝试了一些类似的东西wp_set_auth_cookie,但我不知道该放在哪里。我来自 Ruby on Rails 背景,对 PHP 的了解非常少。

我知道这种行为是不安全的。这是一个特定的用例。

Ars*_*ngh 5

我在评论中发布的答案,您可以通过以下方式使用它。

要使这成为可能,您需要做的是。ajax hooks为 wordpress 函数创建,我们将仅使用用户名和 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');
Run Code Online (Sandbox Code Playgroud)

如您所见,我们使用了一个函数从 ajax 控制器add_action挂钩到我们的username_login函数,在此处阅读有关wordpress 挂钩的更多信息。

我们这里需要的下一步是对我们创建的函数进行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();
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

正如你在上面的 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> 
Run Code Online (Sandbox Code Playgroud)

现在您拥有了所有 ,这将如何与此流程一起使用?. 那么,当用户输入用户名并点击登录时,ajax 请求将发送到 url : yoursite.com/wp-admin/admin-ajax.php?action=username_login,并调用参数action,当用户登录站点时,将在用户登录时刷新,然后用户将拥有访问普通用户的功能没有任何问题。