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

时间:2016-07-06 14:17:18

标签: php wordpress

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

我尝试了一些像wp_set_auth_cookie这样的东西,但我不知道放在哪里。我来自Ruby on Rails背景,并且对PHP知之甚少。

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

1 个答案:

答案 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,当用户登录站点时,将刷新为用户登录后,用户可以正常访问普通用户的功能,没有任何问题。