Back.php 7.28 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()
    {
        echo $this->echoJson(array('code'=> 200));
    }
    
    /**
     * 
     */
    public function emailAction()
    {
        $phoneNum = $this->post('phoneNum','');
        $area = $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);
            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']) {
                    $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);
            }
        }
    }
    
    /**
     * 检查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;
    }
}