function wsl_process_login_reauth() { // HOOKABLE: do_action("wsl_hook_process_login_before_start"); // HOOKABLE: $redirect_to = apply_filters("wsl_hook_process_login_alter_redirect_to", wsl_process_login_get_redirect_to()); // HOOKABLE: $provider = apply_filters("wsl_hook_process_login_alter_provider", wsl_process_login_get_provider()); // authenticate user via a social network ( $provider ) list($user_id, $adapter, $hybridauth_user_profile, $hybridauth_user_id, $hybridauth_user_email, $request_user_login, $request_user_email, ) = wsl_process_login_hybridauth_authenticate($provider, $redirect_to); // if user found on database if ($user_id) { $user_data = get_userdata($user_id); $user_login = $user_data->user_login; $user_email = $hybridauth_user_profile->email; } else { list($user_id, $user_login, $user_email, ) = wsl_process_login_create_wp_user($provider, $hybridauth_user_profile, $request_user_login, $request_user_email); } // finally create a wp session for the user return wsl_process_login_authenticate_wp_user($user_id, $provider, $redirect_to, $adapter, $hybridauth_user_profile); }
/** * Finish the authentication process * * Steps: * 1. Get the user profile from provider * 2. Create new wordpress user if he didn't exist in database * 3. Store his Hybridauth profile, contacts and BP mapping * 4. Authenticate the user within wordpress */ function wsl_process_login_end() { // HOOKABLE: do_action("wsl_process_login_end_start"); // HOOKABLE: set a custom Redirect URL $redirect_to = wsl_process_login_get_redirect_to(); // HOOKABLE: selected provider name $provider = wsl_process_login_get_selected_provider(); // authentication mode $auth_mode = wsl_process_login_get_auth_mode(); $is_new_user = false; // is it a new or returning user $user_id = ''; // wp user id $adapter = ''; // hybriauth adapter for the selected provider $hybridauth_user_profile = ''; // hybriauth user profile $requested_user_login = ''; // username typed by users in Profile Completion $requested_user_email = ''; // email typed by users in Profile Completion // provider is enabled? if (!get_option('wsl_settings_' . $provider . '_enabled')) { return wsl_process_login_render_notice_page(_wsl__("Unknown or disabled provider.", 'wordpress-social-login')); } if ('test' == $auth_mode) { $redirect_to = admin_url('options-general.php?page=wordpress-social-login&wslp=auth-paly&provider=' . $provider); return wp_safe_redirect($redirect_to); } if ('link' == $auth_mode) { // a social account cant be associated with more than one wordpress account. $hybridauth_user_profile = wsl_process_login_request_user_social_profile($provider); $adapter = wsl_process_login_get_provider_adapter($provider); $user_id = (int) wsl_get_stored_hybridauth_user_id_by_provider_and_provider_uid($provider, $hybridauth_user_profile->identifier); if ($user_id && $user_id != get_current_user_id()) { return wsl_process_login_render_notice_page(sprintf(_wsl__("Your <b>%s ID</b> is already linked to another account on this website.", 'wordpress-social-login'), $provider)); } $user_id = get_current_user_id(); // doesn't hurt to double check if (!$user_id) { return wsl_process_login_render_notice_page(_wsl__("Sorry, we couldn't link your account.", 'wordpress-social-login')); } } elseif ('login' != $auth_mode) { return wsl_process_login_render_notice_page(_wsl__('Bouncer says no.', 'wordpress-social-login')); } if ('login' == $auth_mode) { // returns user data after he authenticate via hybridauth list($user_id, $adapter, $hybridauth_user_profile, $requested_user_login, $requested_user_email, $wordpress_user_id) = wsl_process_login_get_user_data($provider, $redirect_to); // if no associated user were found in wslusersprofiles, create new WordPress user if (!$wordpress_user_id) { $user_id = wsl_process_login_create_wp_user($provider, $hybridauth_user_profile, $requested_user_login, $requested_user_email); $is_new_user = true; } else { $user_id = $wordpress_user_id; $is_new_user = false; } } // if user is found in wslusersprofiles but the associated WP user account no longer exist // > this should never happen! but just in case: we delete the user wslusersprofiles/wsluserscontacts entries and we reset the process $wp_user = get_userdata($user_id); if (!$wp_user) { wsl_delete_stored_hybridauth_user_data($user_id); return wsl_process_login_render_notice_page(sprintf(_wsl__("Sorry, we couldn't connect you. <a href=\"%s\">Please try again</a>.", 'wordpress-social-login'), site_url('wp-login.php', 'login_post'))); } // store user hybridauth profile (wslusersprofiles), contacts (wsluserscontacts) and buddypress mapping wsl_process_login_update_wsl_user_data($is_new_user, $user_id, $provider, $adapter, $hybridauth_user_profile, $wp_user); // finally create a wordpress session for the user wsl_process_login_authenticate_wp_user($user_id, $provider, $redirect_to, $adapter, $hybridauth_user_profile, $wp_user); }
function wsl_process_login_reauth() { // HOOKABLE: do_action("wsl_hook_process_login_before_start"); // HOOKABLE: $redirect_to = apply_filters("wsl_hook_process_login_alter_redirect_to", wsl_process_login_get_redirect_to()); // HOOKABLE: $provider = apply_filters("wsl_hook_process_login_alter_provider", wsl_process_login_get_provider()); // authenticate user via a social network ( $provider ) list($user_id, $adapter, $hybridauth_user_profile, $hybridauth_user_id, $hybridauth_user_email, $request_user_login, $request_user_email, ) = wsl_process_login_hybridauth_authenticate($provider, $redirect_to); // if user found on database if ($user_id) { $user_data = get_userdata($user_id); $user_login = $user_data->user_login; $user_email = $hybridauth_user_profile->email; } else { list($user_id, $user_login, $user_email, ) = wsl_process_login_create_wp_user($provider, $hybridauth_user_profile, $request_user_login, $request_user_email); } // There was a bug when *_create_wp_user returned WP_Error, so just in case if (!is_integer($user_id)) { return wsl_render_notices_pages(_wsl__("Invalid user_id returned by create_wp_user.", 'wordpress-social-login')); } // finally create a wp session for the user return wsl_process_login_authenticate_wp_user($user_id, $provider, $redirect_to, $adapter, $hybridauth_user_profile); }