Wp_set_auth_cookie()在AJAX调用中不起作用

时间:2015-02-16 作者:Attila

我正在尝试创建一个基于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();
}

2 个回复
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();
}
我没有测试过这个,所以如果你仍然面临同样的问题,请告诉我。

SO网友:Michał Mazur

我使用带有xhr身份验证头的ajax进行自定义wp登录

$.ajax({
     url : ajax_object.ajaxurl,
    type: "post",
    data: data,
    contentType: \'application/x-www-form-urlencoded\',
    xhrFields: {withCredentials: true}
});

结束

相关推荐

WordPress嵌入AJAX插入的内容

我有一个页面正在调用其他帖子的内容(特别是自定义帖子类型),并将其插入页面。这一切都很好,但我正在失去WordPress获取youtube(和其他可嵌入链接)并自动插入嵌入视频的功能。我试过了apply_filters( \'the_content\', $my_content );, 但我认为该过滤器甚至无法通过admin-ajax.php.我当然已经打过电话了do_shortcode( $my_content ), 但是,以类似的方式,我可以使用什么来嵌入可嵌入的链接呢?更新时间:为了响应bonger