Back.php 8.31 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' => Helpers::url('/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'] = Helpers::url('/passport/back/resendemail', array(
                        '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' => Helpers::url('/emailback.html'),
            'headerText' => '找回密码',
            'isPassportPage' => true,
            'backEmailSuccess' => true,
            'goEmail' => $domain_name,
            'resendUrl' => Helpers::url('/passport/back/resendemail', array(
                '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' => Helpers::url('/signin.html'));
            if (strpos($data, 'history.back') !== false) {
                $result['code'] = 400;
                $result['message'] = '修改失败';
            }

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

    public function mobileAction()
    {
        $this->setTitle('找回密码-通过手机号');

        $data = array(
            'backUrl' => Helpers::url('/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'] = Helpers::url('/passport/back/mobilecode', array(
                        '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' => Helpers::url('/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'] = Helpers::url('/passport/back/backcode', array(
                        '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' => Helpers::url('/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'] = Helpers::url('/signin.html');
            }

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

}