function fbc_init_auth() { $fbuid = fbc_facebook_client()->get_loggedin_user(); $user = wp_get_current_user(); $assoc_fbuid = fbc_get_fbuid($user->ID); if ($assoc_fbuid) { if ($fbuid == $assoc_fbuid) { // user is already logged in to both fbc_login_header('logged in', $fbuid, $user->ID); return; } else { //wp session, no fbsession = logout of wp and reload page // or, user is logged in under a different fb account wp_logout(); header('Location: ' . $_SERVER['REQUEST_URI']); fbc_login_header('logging user out assoc=' . $assoc_fbuid, $fbuid, $user->ID); exit; } } else { if ($user->ID) { fbc_login_header('non-facebook user', $fbuid, $user->ID); // wpuser not associated w/ fb. do nothing return; } else { if ($fbuid) { // not a wp user, but fb authed = log them in to wp $res = fbc_login_if_necessary(); if ($res > 0) { $wp_uid = fbc_fbuser_to_wpuser($res); wp_set_current_user($wp_uid); fbc_login_header('login sucessful', $fbuid, $wp_uid); } else { fbc_login_header('login error ' . $res, $fbuid, $user->ID); } } else { fbc_login_header('anonymous', 0, 0); // neither facebook nor wordpress, do nothing return; } } } }
function fbc_login_if_necessary($allow_link = false) { $fbuid = fbc_facebook_client()->get_loggedin_user(); if ($fbuid) { $wpuid = fbc_fbuser_to_wpuser($fbuid); if (!$wpuid) { // There is no wp user associated w/ this fbuid $user = wp_get_current_user(); $wpuid = $user->ID; if ($wpuid && $allow_link) { // User already has a wordpress account, link to this facebook account update_usermeta($wpuid, 'fbuid', "{$fbuid}"); } else { // Create a new wordpress account $wpuid = fbc_insert_user($fbuid); if ($wpuid === FBC_ERROR_USERNAME_EXISTS) { return FBC_ERROR_USERNAME_EXISTS; } } } else { // Already have a linked wordpress account, fall through and set // login cookie } wp_set_auth_cookie($wpuid, true, false); return $fbuid; } else { return FBC_ERROR_NO_FB_SESSION; } }