WordPress.org

Make WordPress Core

Ticket #7561: 7561.diff

File 7561.diff, 2.1 KB (added by ryan, 10 years ago)
  • wp-login.php

     
    407407
    408408case 'login' :
    409409default:
    410         if ( isset( $_REQUEST['redirect_to'] ) )
     410        $secure_cookie = '';
     411
     412        // If the user wants ssl but the session is not ssl, force a secure cookie.
     413        if ( !empty($_POST['log']) && !force_ssl_admin() ) {
     414                $user_name = sanitize_user($_POST['log']);
     415                if ( $user = get_userdatabylogin($user_name) ) {
     416                        if ( get_user_option('use_ssl', $user->ID) ) {
     417                                $secure_cookie = true;
     418                                force_ssl_admin(true);
     419                        }
     420                }
     421        }
     422
     423        if ( isset( $_REQUEST['redirect_to'] ) ) {
    411424                $redirect_to = $_REQUEST['redirect_to'];
    412         else
     425                // Redirect to https if user wants ssl
     426                if ( $secure_cookie )
     427                        $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
     428        } else {
    413429                $redirect_to = admin_url();
     430        }
    414431
    415         if ( is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
     432        if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
    416433                $secure_cookie = false;
    417         else
    418                 $secure_cookie = '';
    419434
    420435        $user = wp_signon('', $secure_cookie);
    421436
  • wp-includes/pluggable.php

     
    703703                }
    704704        }
    705705
    706         if ( wp_validate_auth_cookie() )
     706        if ( $user_id = wp_validate_auth_cookie() ) {
     707                // If the user wants ssl but the session is not ssl, redirect.
     708                if ( !$secure && get_user_option('use_ssl', $user_id) ) {
     709                        if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
     710                                wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']));
     711                                exit();
     712                        } else {
     713                                wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
     714                                exit();
     715                        }
     716                }
     717
    707718                return;  // The cookie is good so we're done
     719        }
    708720
    709721        // The cookie is no good so force login
    710722        nocache_headers();