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');
I have two site first in react and second in WordPress. I'm trying to login with WordPress. but both domain are different.
1st Set Proper login detail in your $user = wp_signon();
Like This:
//$_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 );
Then set/use wp_signon for login like this:
$user_id = $user->ID;
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
Other Method(direct login without password):
set user id like:
$user_id = $_POST['user_id];
Then
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
One more thing replace
add_action('wp_ajax_nopriv_signon', 'ajax_signon');
To
add_action('wp_ajax_signon', 'ajax_signon');
add_action('wp_ajax_nopriv_signon', 'ajax_signon');