function simple_fb_connect_return_from_fb in Simple FB Connect 7.2
Page callback for /user/simple-fb-connect/return.
Facebook returns the user here after user has authenticated in FB.
1 string reference to 'simple_fb_connect_return_from_fb'
- simple_fb_connect_menu in ./
simple_fb_connect.module - Implements hook_menu().
File
- ./
simple_fb_connect.module, line 167 - Simple Facebook Login Module for Drupal Sites.
Code
function simple_fb_connect_return_from_fb() {
// Validate configuration.
if (!simple_fb_connect_initialize()) {
drupal_goto('user');
}
// FB SDK can start FacebookSession from the page where FB returned the user.
$return_url = simple_fb_connect_get_return_url();
$login_helper = new FacebookRedirectLoginHelper($return_url);
if (!simple_fb_connect_save_session($login_helper)) {
drupal_set_message(t("Facebook login failed."), "error");
drupal_goto('user');
}
// Get a validated FacebookSession object.
if (!($fb_session = simple_fb_connect_get_session())) {
drupal_set_message(t("Facebook login failed."), "error");
simple_fb_connect_destroy_session();
drupal_goto('user');
}
// Check that user authorized our app to access user's email address.
if (!simple_fb_connect_check_permission($fb_session, 'email')) {
$site_name = variable_get('site_name');
if ($site_name) {
drupal_set_message(t("Facebook login failed. @site_name requires permission to get your email address from Facebook. Please try again and give the permission.", array(
'@site_name' => $site_name,
)), "error");
}
else {
drupal_set_message(t("Facebook login failed. This site requires permission to get your email address from Facebook. Please try again and give the permission."), "error");
}
// Preserve the post login URL from the previous attempt.
$post_login_url = simple_fb_connect_get_post_login_url();
simple_fb_connect_destroy_session();
// Set the email permission reprompt flag and save post-login URL.
$_SESSION['simple_fb_connect']['reprompt'] = TRUE;
$_SESSION['simple_fb_connect']['post_login_url'] = $post_login_url;
drupal_goto('user');
}
// Get the user's Facebook profile from Facebook API.
if (!($fb_profile = simple_fb_connect_get_fb_profile($fb_session))) {
drupal_set_message(t("Facebook login failed."), "error");
simple_fb_connect_destroy_session();
drupal_goto('user');
}
// Get user's email address from the profile. It is possible that FB profile
// does not have email address (user can sign up with a phone number only).
if (!($email = simple_fb_connect_get_email($fb_profile))) {
drupal_set_message(t('Facebook login failed. This site requires an email address. Please add one in your Facebook profile.'), 'error');
simple_fb_connect_destroy_session();
drupal_goto('user');
}
// Check if we have an existing Drupal user with the same email address and try to log in.
if ($drupal_user = user_load_by_mail($email)) {
if (simple_fb_connect_login_user($drupal_user)) {
$post_login_url = simple_fb_connect_get_post_login_url();
simple_fb_connect_go_to_redirect_url($post_login_url, $drupal_user);
}
else {
simple_fb_connect_destroy_session();
drupal_goto('user');
}
}
// If there was no existing user, try to create a new user and try to log in.
if ($drupal_user = simple_fb_connect_create_user($fb_profile, $fb_session)) {
if (simple_fb_connect_login_user($drupal_user)) {
// Check if new users should be redirected to Drupal user form.
$redirect_to_user_form = variable_get('simple_fb_connect_redirect_user_form', 0);
if ($redirect_to_user_form) {
drupal_set_message(t("Please take a moment to confirm your account details. Since you logged in with Facebook, you don't need to update your password."));
$post_login_url = 'user/' . $drupal_user->uid . '/edit';
simple_fb_connect_go_to_redirect_url($post_login_url, $drupal_user);
}
// If user wasn't redirected to user form, use the normal post login path.
$post_login_url = simple_fb_connect_get_post_login_url();
simple_fb_connect_go_to_redirect_url($post_login_url, $drupal_user);
}
else {
// New user was successfully created but the account is blocked.
drupal_set_message(t('You will receive an email when a site administrator activates your account.'), 'warning');
$post_login_url = simple_fb_connect_get_post_login_url();
simple_fb_connect_destroy_session();
simple_fb_connect_go_to_redirect_url($post_login_url, $drupal_user);
}
}
else {
// New user could not be created.
simple_fb_connect_destroy_session();
drupal_goto('user');
}
// We should never reach this point because the user is redirected in all
// cases to some other page. If we ever get here, return "access denied" page.
return MENU_ACCESS_DENIED;
}