Back.php 6.54 KB
<?php
use Action\WebAction;
use LibModels\Web\Passport\RegData;
use Passport\PassportModel;
use Plugin\Helpers;
use LibModels\Wap\Passport\BackData;
use Plugin\AuthCode;
class BackController extends WebAction {
	
	/**
	 * 找回密码
	 */
	public function indexAction() {
		$banner = PassportModel::getLeftBanner(PassportModel::BACK_LFFT_BANNER_CODE);
		$data = array (
				'simpleHeader' => PassportModel::getSimpleHeader(false),
				'backPage' => true,
				'back' => array (
						'coverHref' => $banner ['url'],
						'coverImg' => $banner ['img'],
						'countryCode' => '86',
						'countryName' => '中国',
						'captchaUrl' => '/passport/images?t=1449799445',
						'countryList' => RegData::getAreasData() 
				) 
		);
		$this->_view->display ( 'index', $data );
	}
	
	/**
	 * 校验验证码
	 */
	public function authcodeAction() {
		$phoneNum = $this->post ('phoneNum', '');
		$area = intval ($this->post( 'area', '86' ));
		$verifyCode = $this->post ('verifyCode', '');
		$data = array('code' => 400, 'message' =>'验证失败');
		if ((Helpers::verifyEmail($phoneNum) || Helpers::verifyMobile($phoneNum)) 
				&& PassportModel::verifyCode($verifyCode)) {
			$data['code'] = 200;
			$data['message'] = '验证成功';
		}
		echo $this->echoJson($data);
	}
	
	/**
	 * 邮箱
	 */
	public function emailAction() {
		$phoneNum = $this->post ('phoneNum', '');
		$area = intval ($this->post('area', '86'));
		$verifyCode = $this->post('verifyCode', '');
		if (Helpers::verifyEmail($phoneNum)) { // 验证邮箱
			$email = $phoneNum;
			$data = BackData::sendCodeToEmail($email);
			if ($data ['code'] == 200) {
				$this->setSession('email', $email);
				$this->redirect ('sendemail');
			} else {
				$this->redirect ('index');
			}
			
		} else if (Helpers::verifyMobile($phoneNum)) { // 验证手机号
			$mobile = $phoneNum;
			$data = BackData::sendCodeToMobile($mobile, $area);
			if ($data['code'] == 200) {
				$this->setSession ('mobile', $mobile );
				$this->setSession ('area', $area );
				$this->setSession ('verifyCode', $verifyCode );
				$this->redirect ('verification');
			} else {
				$this->redirect ('index');
			}
		}
	}
	
	/**
	 * 发送邮件页面
	 */
	public function sendemailAction() {
		$email = $this->getSession ('email');
		if (empty ( $email )) {
			$this->redirect ('index');
		}
		$banner = PassportModel::getLeftBanner(PassportModel::BACK_LFFT_BANNER_CODE);
		$data = array (
				'simpleHeader' => PassportModel::getSimpleHeader(false),
				'sendEmail' => array (
					'coverHref' => $banner ['url'],
					'coverImg' => $banner ['img'],
					'countrys' => array () 
				) 
		);
		$this->_view->display('send-email', $data);
	}
	
	/**
	 * 重置密码页面
	 */
	public function backcodeAction() {
		$code = $this->get('code');
		$info = $this->checkCode($code);
		if (empty ( $info )) {
			$this->redirect ('index');
		}
		$banner = PassportModel::getLeftBanner(PassportModel::BACK_LFFT_BANNER_CODE);
		$data = array (
				'simpleHeader' => PassportModel::getSimpleHeader(false),
				'resetPage' => true,
				'resetPwd' => array (
					'coverHref' => $banner ['url'],
					'coverImg' => $banner ['img'],
					'countrys' => array(),
					'code' => $code 
				) 
		);
		$this->_view->display('reset-pwd', $data);
	}
	
	/**
	 * 更新密码接口
	 */
	public function updateAction() {
		$code = $this->post('code');
		$password = $this->post('pwd');
		$info = $this->checkCode($code);
		if (Helpers::verifyPassword ($password) && ! empty ($info)) {
			// 修改密码
			if (isset ( $info ['mobile'] )) { // 手机号修改密码
				$mobile = $info ['mobile'];
				$token = $info ['token'];
				$area = $info ['area'];
				$data = BackData::modifyPasswordByMobile($mobile, $token, $password, $area);
				if ($data ['code'] == 200) {
					$this->redirect ( 'resetSuccess' );
				}
			} else if (isset ($info ['uid'])) { // 其他方式修改密码
				$uid = $info ['uid'];
				$this->redirect ( 'resetSuccess' );
			}
		}
		// 跳转错误页面
		$this->redirect('/error/index');
	}
	
	/**
	 * 重置密码成功
	 */
	public function resetSuccessAction() {
		$banner = PassportModel::getLeftBanner ( PassportModel::BACK_LFFT_BANNER_CODE );
		$data = array (
				'simpleHeader' => PassportModel::getSimpleHeader ( false ),
				'resetSuccess' => array (
					'coverHref' => $banner ['url'],
					'coverImg' => $banner ['img'],
					'countrys' => array () 
				) 
		);
		$this->_view->display ( 'reset-success', $data );
	}
	
	/**
	 * 手机验证页面
	 */
	public function verificationAction() {
		$mobile = $this->getSession ('mobile');
		$area = $this->getSession ('area');
		$verifyCode = $this->getSession ('verifyCode');
		if (empty ($mobile)) {
			$this->redirect ('index');
		}
		$banner = PassportModel::getLeftBanner (PassportModel::BACK_LFFT_BANNER_CODE);
		$data = array (
				'simpleHeader' => PassportModel::getSimpleHeader ( false ),
				'vertificationPage' => true,
				'verification' => array (
					'coverHref' => $banner ['url'],
					'coverImg' => $banner ['img'],
					'mobile' => $mobile,
					'area' => $area,
					'verifyCode' => $verifyCode,
					'countrys' => array () 
				) 
		);
		$this->_view->display ('verification', $data);
	}
	
	/**
	 * 手机找回密码验证
	 */
	public function backmobileAction() {
		$mobile = $this->post ( 'mobile' );
		$area = $this->post ( 'area' );
		$verifyCode = $this->post ( 'verifyCode' );
		$code = $this->post ( 'code' ); // code
		if ($this->getSession ( 'mobile' ) == $mobile && $this->getSession ( 'area' ) == $area) {
			$result = BackData::validateMobileCode ( $mobile, $code, $area );
			if ($result ['code'] == 200) {
				$str = json_encode ( array (
						'mobile' => $mobile,
						'area' => $area,
						'token' => $result ['data'] ['token'],
						'create_time' => time () 
				) );
				$code = AuthCode::encode ( $str, PassportModel::BACK_FIND_SECRET_KEY );
				$url = '/passport/back/backcode?code=' . base64_encode ( $code );
				$this->redirect ( SITE_MAIN . $url );
			}
		}
		//出错直接跳到找回密码页
		$this->redirect ('/passport/back/index');
	}
	
	/**
	 * 检查code
	 *
	 * @param string $code        	
	 * @return boolean
	 */
	private function checkCode($code) {
		$code = base64_decode ( $code );
		$info = json_decode ( AuthCode::decode ( $code, PassportModel::BACK_FIND_SECRET_KEY ), true );
		if ($info ['create_time'] < 1 || (time () - $info ['create_time']) > 86400) {
			return array ();
		}
		return $info;
	}

}