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();
}
現在のユーザーを設定するための関数 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();
}
私はこれをテストしていないので、それでもあなたが同じ問題に直面しているかどうか私に知らせてください。
私のカスタムWPログインにはxhr認証ヘッダを持つajaxを使用します。
$.ajax({
url : ajax_object.ajaxurl,
type: "post",
data: data,
contentType: 'application/x-www-form-urlencoded',
xhrFields: {withCredentials: true}
});