首页 > 解决方案 > WordPress ajax 成功登录但未设置当前用户?

问题描述

function ajax_signon () {
    check_ajax_referer('mbx-nonce', 'security');
    $user = wp_signon();
    if ( is_wp_error($user) ) {
        echo json_encode(array(
            'userId' => -1,
            'loggedIn' => false,
            'message' => __('Wrong username or password.')
        ));
    } else {
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);
        echo json_encode(array(
            'userId' => $user->ID,
            'loggedIn' => true,
            'message' => __('Login successful')
        ));
    }
    exit();
}
add_action('wp_ajax_nopriv_signon', 'ajax_signon');

我有两个站点,第一个在 react 中,第二个在 WordPress 中。我正在尝试使用 WordPress 登录。但两个域是不同的。

标签: wordpresswordpress-rest-api

解决方案


第一个在您的 $user = wp_signon(); 中设置正确的登录详细信息

像这样:

//$_POST["user_email"] = 'admin';
//$_POST["user_password"] = '123456';

$user_login     = esc_attr($_POST["user_email"]);
$user_password  = esc_attr($_POST["user_password"]);

$creds = array();
$creds['user_login'] = $user_login;
$creds['user_password'] = $user_password;
$creds['remember'] = true;

$user = wp_signon( $creds, false );

然后设置/使用 wp_signon 进行登录,如下所示:

$user_id = $user->ID;

wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);

其他方法(无需密码直接登录):

设置用户ID,如:

$user_id = $_POST['user_id];

然后

wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);

再换一件事

add_action('wp_ajax_nopriv_signon', 'ajax_signon');

add_action('wp_ajax_signon', 'ajax_signon');
add_action('wp_ajax_nopriv_signon', 'ajax_signon');

推荐阅读