Back.php 8 KB
<?php

use Action\AbstractAction;
use LibModels\Wap\Passport\BackData;
use LibModels\Wap\Passport\RegData;
use Plugin\Helpers;

/**
 * 频道选择
 */
class BackController extends AbstractAction
{

    public function emailAction()
    {
        $this->setTitle('找回密码-通过邮箱');
        
        $data = array(
            'backUrl' => '/signin.html',
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backEmail' => true
        );

        // 生成HTML (emailback.html)
        $this->_view->html('emailback');
        $this->_view->display('email', $data);
    }

    /**
     * 发送邮箱验证码
     */
    public function sendemailAction()
    {
        $result = array('code' => 400, 'message' => '邮箱格式不正确,请重新输入', 'data' => '');
        do
        {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) 
            {
                break;
            }

            $email = $this->post('email', '');
            // 判断邮箱是否有效
            if(!Helpers::verifyEmail($email))
            {
                break;
            }

            // 发送邮箱验证码
            $result = BackData::sendCodeToEmail($email);
            if($result['code'] === 200)
            {
                $result['data'] = '/passport/back/success?email='.$email;
            }

        }
        while (false);

        $this->echoJson($result);
    }

    /**
     * 重新发送邮箱验证码
     */
    public function resendemailAction()
    {
        $result = array('code' => 400, 'message' => '重发邮件失败');
        do
        {
            if(!$this->isAjax())
            {
                break;
            }

            $email = $this->get('email', '');

            // 发送邮箱验证码
            $return = BackData::sendCodeToEmail($email);

            if(!empty($return))
            {
                $result = $return;
            }

        }
        while(false);

        $this->echoJson($result);
    }

    public function successAction()
    {
        $email = $this->get('email', '');
        // 判断是否允许访问, 不允许则跳转到错误页面
        if (!Helpers::verifyEmail($email)) {
            $this->error();
        }
        
        // 获取到邮箱域名
        list($name, $domain) = explode('@', $email);
        $domain_name = 'http://' . (($domain == 'gmail.com') ? 'mail.google.com' : 'mail.' . $domain);

        $data = array(
            'backUrl' => '/emailback.html',
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backEmailSuccess' => true,
            'goEmail' => $domain_name,
            'resendUrl' => '/passport/back/resendemail?email='.$email
        );

        $this->setTitle('找回密码-通过邮箱');
        $this->_view->display('email-success', $data);
    }

    /**
     * 根据邮箱修改密码
     * 
     * @return array 根据邮箱修改密码的结果
     */
    public function passwordByEmailAction()
    {
        if($this->isAjax())
        {
            $pwd = $this->post('password', '');
            $code = $this->post('code', '');

            $data = BackData::modifyPasswordByEmail($pwd, $code);

            $result = array('code'=>200, 'data' => '/signin.html');
            print_r($data);
            if(strpos($data, 'history.back') !== false)
            {
                $result['code'] = 400;
                $result['message'] = '修改失败';
            }

            $this->echoJson($result);// 前端不需要判断结果
        }
    }


    public function mobileAction()
    {
        $this->setTitle('找回密码-通过手机号');
        
        $data = array(
            'backUrl' => '/signin.html',
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backMobile' => true,
            'countrys' => RegData::getAreasData(),
            'areaCode' => '+86'
        );

        // 生成HTML (phoneback.html)
        // $this->_view->html('phoneback');
        
        $this->_view->display('mobile', $data);
    }

    /**
     * 发送手机验证码
     */
    public function sendcodeAction()
    {
        $result = array('code' => 400, 'message' => '密码只能使用数字、字母和半角标点符号,请重新输入', 'data' => '');
        do
        {
            /* 判断是不是AJAX请求 */
            if (!$this->isAjax()) 
            {
                break;
            }
            $phoneNum = $this->post('phoneNum', '');
            $areaCode = $this->post('areaCode', 86);

            if(!Helpers::verifyMobile($phoneNum))
            {
                break;
            }

            // 发送手机验证码
            $result = BackData::sendCodeToMobile($phoneNum, $areaCode);
            if(empty($result))
            {
                break;
            }
            
            if($result['code'] === 200)
            {
                $result['data'] = '/passport/back/mobilecode?phoneNum='.$phoneNum.'&areaCode='.$areaCode;
            }

        }
        while (false);

        $this->echoJson($result);
    }

    /**
     * 校验验证码页面
     */
    public function mobilecodeAction()
    {
        $phoneNum = $this->get('phoneNum', '');
        $areaCode = $this->get('areaCode', 86);
        $areaCode = '+'.$areaCode;

        $data = array(
            'backUrl' => '/phoneback.html',
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backCode' => true,
            'areaCode' => $areaCode,
            'phoneNum' => $phoneNum
        );

        $this->setTitle('找回密码-通过手机号');
        $this->_view->display('mobile-code', $data);
    }

    /**
     * 校验手机验证码
     * 
     * @return array 校验手机验证码的结果(token)
     */
    public function verifycodeAction()
    {
        if($this->isAjax())
        {
            $phoneNum = $this->post('phoneNum', '');
            $code = $this->post('code', '');
            $areaCode = $this->post('areaCode', 86);

            // 校验手机验证码
            $result = BackData::validateMobileCode($phoneNum, $code, $areaCode);
            if($result['code'] === 200)
            {
                $result['data'] = '/passport/back/backcode?phoneNum='.$phoneNum.'&token='.$result['data']['token'].'&areaCode='.$areaCode;
            }

            $this->echoJson($result);
        }
    }

    public function backcodeAction()
    {
        $phoneNum = $this->get('phoneNum', '');
        // 手机验证令牌
        $token = $this->get('token', '');
        $areaCode = $this->get('areaCode', 86);

        // 邮箱验证码
        $code = $this->get('code', '');

        // 判断是否允许访问, 不允许则跳转到错误页面
        if ((!$token || !Helpers::verifyMobile($phoneNum)) && !$code) {
            $this->error();
        }
        
        $data = array(
            'backUrl' => '/signin.html',
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backNewPwd' => true,
            'phoneNum' => $phoneNum,
            'token' => $token,
            'areaCode' => $areaCode,
            'code' => $code
        );

        $this->setTitle('找回密码-输入新密码');
        $this->_view->display('new-password', $data);
    }

    /**
     * 根据手机验证码修改密码
     * 
     * @return array 根据手机验证码修改密码的结果
     */
    public function passwordByMobileAction()
    {
        if($this->isAjax())
        {
            $phoneNum = $this->post('phoneNum', '');
            $token = $this->post('token', '');
            $newpwd = $this->post('password', '');
            $areaCode = $this->post('areaCode', 86);

            // 根据手机验证码修改密码
            $result = BackData::modifyPasswordByMobile($phoneNum, $token, $newpwd, $areaCode);
            if($result['code'] === 200)
            {
                $result['data'] = '/';
            }

            $this->echoJson($result);
        }
    }
}