我正在尝试创建一个基于Facebook JS-SDK的自动登录功能。当用户“连接”时,将FbID和其他用户数据传递给创建会话cookie的ajax函数。Cookie已创建(我可以看到"wordpress_logged_in_.... cookie"
但当我重新加载页面时,用户仍会注销。
你知道为什么吗?
JavaScript
function ajaxloginFB(uid,email,first_name,last_name) {
data = "uid=" + uid + "&" + "name=" + last_name + " " + first_name + "&" + "email=" + email + "&" + $.param({ action: \'facebook_login\', nonce: ajax_object.ajaxnonce });
$.ajax({
url : ajax_object.ajaxurl,
type: "post",
data : data,
success:function(response){
var response = $.parseJSON(response);
if (response.success == true){
window.location.reload();
}
}
});
}
PHP
add_action( \'wp_ajax_facebook_login\', \'facebook_ajax_login_or_register\' );
add_action( \'wp_ajax_nopriv_facebook_login\', \'facebook_ajax_login_or_register\' );
function facebook_ajax_login_or_register(){
$uid = sanitize_text_field( $_POST[\'uid\'] );
$args = array(
\'meta_key\' => \'fbuid\',
\'meta_value\' => $uid,
\'meta_compare\' => \'=\',
);
$fb_user = get_users($args);
$current_user_id = $fb_user[0];
wp_set_auth_cookie( $current_user_id, true );
$response[success] = true;
echo json_encode($response);
die();
}
SO网友:AddWeb Solution Pvt Ltd
我添加了一个函数wp_set_current_user 用于设置当前用户。
add_action( \'wp_ajax_facebook_login\', \'facebook_ajax_login_or_register\' );
add_action( \'wp_ajax_nopriv_facebook_login\', \'facebook_ajax_login_or_register\' );
function facebook_ajax_login_or_register(){
$uid = sanitize_text_field( $_POST[\'uid\'] );
$args = array(
\'meta_key\' => \'fbuid\',
\'meta_value\' => $uid,
\'meta_compare\' => \'=\',
);
$fb_user = get_users($args);
$current_user_id = $fb_user[0];
wp_set_current_user($current_user_id);//Set current user
wp_set_auth_cookie( $current_user_id, true );
$response[success] = true;
echo json_encode($response);
die();
}
我没有测试过这个,所以如果你仍然面临同样的问题,请告诉我。