diff options
Diffstat (limited to 'includes/User.php')
-rw-r--r-- | includes/User.php | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/includes/User.php b/includes/User.php index 51ffe70a..fb19ddf2 100644 --- a/includes/User.php +++ b/includes/User.php @@ -897,24 +897,25 @@ class User { } $passwordCorrect = FALSE; - $this->mId = $sId; - if ( !$this->loadFromId() ) { - # Not a valid ID, loadFromId has switched the object to anon for us + $proposedUser = User::newFromId( $sId ); + if ( !$proposedUser->isLoggedIn() ) { + # Not a valid ID + $this->loadDefaults(); return false; } global $wgBlockDisablesLogin; - if( $wgBlockDisablesLogin && $this->isBlocked() ) { + if( $wgBlockDisablesLogin && $proposedUser->isBlocked() ) { # User blocked and we've disabled blocked user logins $this->loadDefaults(); return false; } if ( isset( $_SESSION['wsToken'] ) ) { - $passwordCorrect = $_SESSION['wsToken'] == $this->mToken; + $passwordCorrect = $proposedUser->getToken() === $_SESSION['wsToken']; $from = 'session'; } else if ( isset( $_COOKIE["{$wgCookiePrefix}Token"] ) ) { - $passwordCorrect = $this->mToken == $_COOKIE["{$wgCookiePrefix}Token"]; + $passwordCorrect = $proposedUser->getToken() === $_COOKIE["{$wgCookiePrefix}Token"]; $from = 'cookie'; } else { # No session or persistent login cookie @@ -922,7 +923,8 @@ class User { return false; } - if ( ( $sName == $this->mName ) && $passwordCorrect ) { + if ( ( $sName === $proposedUser->getName() ) && $passwordCorrect ) { + $this->loadFromUserObject( $proposedUser ); $_SESSION['wsToken'] = $this->mToken; wfDebug( "Logged in from $from\n" ); return true; @@ -935,6 +937,18 @@ class User { } /** + * Load the data for this user object from another user object. + */ + protected function loadFromUserObject( $user ) { + $user->load(); + $user->loadGroups(); + $user->loadOptions(); + foreach ( self::$mCacheVars as $var ) { + $this->$var = $user->$var; + } + } + + /** * Load user and user_group data from the database. * $this::mId must be set, this is how the user is identified. * |