specialuserlogin.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 691 行 · 第 1/2 页
PHP
691 行
if ( $wgAuth->authenticate( $u->getName(), $this->mPassword ) ) { $u =& $this->initUser( $u ); } else { $this->mainLoginForm( wfMsg( 'wrongpassword' ) ); return; } } else { $this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) ); return; } } else { $u->loadFromDatabase(); } if (!$u->checkPassword( $this->mPassword )) { $this->mainLoginForm( wfMsg( $this->mPassword == '' ? 'wrongpasswordempty' : 'wrongpassword' ) ); return; } # We've verified now, update the real record # if ( $this->mRemember ) { $r = 1; } else { $r = 0; } $u->setOption( 'rememberpassword', $r ); $wgAuth->updateUser( $u ); $wgUser = $u; $wgUser->setCookies(); $wgUser->saveSettings(); if( $this->hasSessionCookie() ) { return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) ); } else { return $this->cookieRedirectCheck( 'login' ); } } /** * @private */ function mailPassword() { global $wgUser, $wgOut; # Check against the rate limiter if( $wgUser->pingLimiter( 'mailpassword' ) ) { $wgOut->rateLimited(); return; } if ( '' == $this->mName ) { $this->mainLoginForm( wfMsg( 'noname' ) ); return; } $u = User::newFromName( $this->mName ); if( is_null( $u ) ) { $this->mainLoginForm( wfMsg( 'noname' ) ); return; } if ( 0 == $u->getID() ) { $this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) ); return; } $u->loadFromDatabase(); $result = $this->mailPasswordInternal( $u ); if( WikiError::isError( $result ) ) { $this->mainLoginForm( wfMsg( 'mailerror', $result->getMessage() ) ); } else { $this->mainLoginForm( wfMsg( 'passwordsent', $u->getName() ), 'success' ); } } /** * @return mixed true on success, WikiError on failure * @private */ function mailPasswordInternal( $u ) { global $wgCookiePath, $wgCookieDomain, $wgCookiePrefix, $wgCookieSecure; global $wgServer, $wgScript; if ( '' == $u->getEmail() ) { return wfMsg( 'noemail', $u->getName() ); } $np = $u->randomPassword(); $u->setNewpassword( $np ); setcookie( "{$wgCookiePrefix}Token", '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure ); $u->saveSettings(); $ip = wfGetIP(); if ( '' == $ip ) { $ip = '(Unknown)'; } $m = wfMsg( 'passwordremindertext', $ip, $u->getName(), $np, $wgServer . $wgScript ); $result = $u->sendMail( wfMsg( 'passwordremindertitle' ), $m ); return $result; } /** * @param string $msg Message that will be shown on success * @param bool $auto Toggle auto-redirect to main page; default true * @private */ function successfulLogin( $msg, $auto = true ) { global $wgUser; global $wgOut; # Run any hooks; ignore results wfRunHooks('UserLoginComplete', array(&$wgUser)); $wgOut->setPageTitle( wfMsg( 'loginsuccesstitle' ) ); $wgOut->setRobotpolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); $wgOut->addWikiText( $msg ); if ( !empty( $this->mReturnTo ) ) { $wgOut->returnToMain( $auto, $this->mReturnTo ); } else { $wgOut->returnToMain( $auto ); } } /** */ function userNotPrivilegedMessage() { global $wgOut; $wgOut->setPageTitle( wfMsg( 'whitelistacctitle' ) ); $wgOut->setRobotpolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); $wgOut->addWikiText( wfMsg( 'whitelistacctext' ) ); $wgOut->returnToMain( false ); } /** * @private */ function mainLoginForm( $msg, $msgtype = 'error' ) { global $wgUser, $wgOut, $wgAllowRealName, $wgEnableEmail; global $wgCookiePrefix, $wgAuth, $wgLoginLanguageSelector; if ( $this->mType == 'signup' && !$wgUser->isAllowedToCreateAccount() ) { $this->userNotPrivilegedMessage(); return; } if ( '' == $this->mName ) { if ( $wgUser->isLoggedIn() ) { $this->mName = $wgUser->getName(); } else { $this->mName = @$_COOKIE[$wgCookiePrefix.'UserName']; } } $titleObj = Title::makeTitle( NS_SPECIAL, 'Userlogin' ); require_once( 'SkinTemplate.php' ); require_once( 'templates/Userlogin.php' ); if ( $this->mType == 'signup' ) { $template =& new UsercreateTemplate(); $q = 'action=submitlogin&type=signup'; $linkq = 'type=login'; $linkmsg = 'gotaccount'; } else { $template =& new UserloginTemplate(); $q = 'action=submitlogin&type=login'; $linkq = 'type=signup'; $linkmsg = 'nologin'; } if ( !empty( $this->mReturnTo ) ) { $returnto = '&returnto=' . wfUrlencode( $this->mReturnTo ); $q .= $returnto; $linkq .= $returnto; } # Pass any language selection on to the mode switch link if( $wgLoginLanguageSelector && $this->mLanguage ) $linkq .= '&uselang=' . $this->mLanguage; $link = '<a href="' . htmlspecialchars ( $titleObj->getLocalUrl( $linkq ) ) . '">'; $link .= wfMsgHtml( $linkmsg . 'link' ); $link .= '</a>'; # Don't show a "create account" link if the user can't if( $this->showCreateOrLoginLink( $wgUser ) ) $template->set( 'link', wfMsgHtml( $linkmsg, $link ) ); else $template->set( 'link', '' ); $template->set( 'header', '' ); $template->set( 'name', $this->mName ); $template->set( 'password', $this->mPassword ); $template->set( 'retype', $this->mRetype ); $template->set( 'email', $this->mEmail ); $template->set( 'realname', $this->mRealName ); $template->set( 'domain', $this->mDomain ); $template->set( 'action', $titleObj->getLocalUrl( $q ) ); $template->set( 'message', $msg ); $template->set( 'messagetype', $msgtype ); $template->set( 'createemail', $wgEnableEmail && $wgUser->isLoggedIn() ); $template->set( 'userealname', $wgAllowRealName ); $template->set( 'useemail', $wgEnableEmail ); $template->set( 'remember', $wgUser->getOption( 'rememberpassword' ) or $this->mRemember ); # Prepare language selection links as needed if( $wgLoginLanguageSelector ) { $template->set( 'languages', $this->makeLanguageSelector() ); if( $this->mLanguage ) $template->set( 'uselang', $this->mLanguage ); } // Give authentication and captcha plugins a chance to modify the form $wgAuth->modifyUITemplate( $template ); if ( $this->mType == 'signup' ) { wfRunHooks( 'UserCreateForm', array( &$template ) ); } else { wfRunHooks( 'UserLoginForm', array( &$template ) ); } $wgOut->setPageTitle( wfMsg( 'userlogin' ) ); $wgOut->setRobotpolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); $wgOut->addTemplate( $template ); } /** * @private */ function showCreateOrLoginLink( &$user ) { if( $this->mType == 'signup' ) { return( true ); } elseif( $user->isAllowedToCreateAccount() ) { return( true ); } else { return( false ); } } /** * @private */ function hasSessionCookie() { global $wgDisableCookieCheck; return ( $wgDisableCookieCheck ) ? true : ( isset( $_COOKIE[session_name()] ) ); } /** * @private */ function cookieRedirectCheck( $type ) { global $wgOut; $titleObj = Title::makeTitle( NS_SPECIAL, 'Userlogin' ); $check = $titleObj->getFullURL( 'wpCookieCheck='.$type ); return $wgOut->redirect( $check ); } /** * @private */ function onCookieRedirectCheck( $type ) { global $wgUser; if ( !$this->hasSessionCookie() ) { if ( $type == 'new' ) { return $this->mainLoginForm( wfMsg( 'nocookiesnew' ) ); } else if ( $type == 'login' ) { return $this->mainLoginForm( wfMsg( 'nocookieslogin' ) ); } else { # shouldn't happen return $this->mainLoginForm( wfMsg( 'error' ) ); } } else { return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) ); } } /** * @private */ function throttleHit( $limit ) { global $wgOut; $wgOut->addWikiText( wfMsg( 'acct_creation_throttle_hit', $limit ) ); } /** * Produce a bar of links which allow the user to select another language * during login/registration but retain "returnto" * * @return string */ function makeLanguageSelector() { $msg = wfMsgForContent( 'loginlanguagelinks' ); if( $msg != '' && $msg != '<loginlanguagelinks>' ) { $langs = explode( "\n", $msg ); $links = array(); foreach( $langs as $lang ) { $lang = trim( $lang, '* ' ); $parts = explode( '|', $lang ); $links[] = $this->makeLanguageSelectorLink( $parts[0], $parts[1] ); } return count( $links ) > 0 ? wfMsgHtml( 'loginlanguagelabel', implode( ' | ', $links ) ) : ''; } else { return ''; } } /** * Create a language selector link for a particular language * Links back to this page preserving type and returnto * * @param $text Link text * @param $lang Language code */ function makeLanguageSelectorLink( $text, $lang ) { global $wgUser; $self = Title::makeTitle( NS_SPECIAL, 'Userlogin' ); $attr[] = 'uselang=' . $lang; if( $this->mType == 'signup' ) $attr[] = 'type=signup'; if( $this->mReturnTo ) $attr[] = 'returnto=' . $this->mReturnTo; $skin =& $wgUser->getSkin(); return $skin->makeKnownLinkObj( $self, htmlspecialchars( $text ), implode( '&', $attr ) ); } }?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?