mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-08-05 22:11:40 +08:00
完成登录和重置密码
This commit is contained in:
parent
533b0eaad5
commit
be8937ddcf
@ -23,7 +23,7 @@
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide kg-verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="verify-btn" class="kg-verify-btn-ok layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -31,7 +31,8 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"></label>
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" {% if captcha.enabled %}disabled="disabled"{% endif %} lay-submit="true" lay-filter="go">登录</button>
|
||||
{% set disabled = captcha.enabled ? 'disabled="disabled"' : '' %}
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" {{ disabled }} lay-submit="true" lay-filter="go">登录</button>
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
@ -61,8 +62,8 @@
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-btn').removeClass('layui-hide');
|
||||
$('#submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -4,6 +4,7 @@ namespace App\Http\Web\Controllers;
|
||||
|
||||
use App\Http\Web\Services\Account as AccountService;
|
||||
use App\Services\Frontend\Account\EmailUpdate as EmailUpdateService;
|
||||
use App\Services\Frontend\Account\PasswordReset as PasswordResetService;
|
||||
use App\Services\Frontend\Account\PasswordUpdate as PasswordUpdateService;
|
||||
use App\Services\Frontend\Account\PhoneUpdate as PhoneUpdateService;
|
||||
|
||||
@ -18,6 +19,10 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function registerAction()
|
||||
{
|
||||
if ($this->authUser->id > 0) {
|
||||
$this->response->redirect('/');
|
||||
}
|
||||
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
@ -33,7 +38,18 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function doRegisterAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->register();
|
||||
|
||||
$returnUrl = $this->request->getPost('return_url');
|
||||
|
||||
$content = [
|
||||
'location' => $returnUrl ?: '/',
|
||||
'msg' => '注册成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,6 +57,10 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function loginAction()
|
||||
{
|
||||
if ($this->authUser->id > 0) {
|
||||
$this->response->redirect('/');
|
||||
}
|
||||
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
@ -60,7 +80,14 @@ class AccountController extends Controller
|
||||
|
||||
$service->loginByPassword();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
$returnUrl = $this->request->getPost('return_url');
|
||||
|
||||
$content = [
|
||||
'location' => $returnUrl ?: '/',
|
||||
'msg' => '登录成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,7 +99,14 @@ class AccountController extends Controller
|
||||
|
||||
$service->loginByVerify();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
$returnUrl = $this->request->getPost('return_url');
|
||||
|
||||
$content = [
|
||||
'location' => $returnUrl ?: '/',
|
||||
'msg' => '登录成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,6 +126,10 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function forgetPasswordAction()
|
||||
{
|
||||
if ($this->authUser->id > 0) {
|
||||
$this->response->redirect('/');
|
||||
}
|
||||
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
@ -105,7 +143,18 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function resetPasswordAction()
|
||||
{
|
||||
$service = new PasswordResetService();
|
||||
|
||||
$service->handle();
|
||||
|
||||
$loginUrl = $this->url->get(['for' => 'web.account.login']);
|
||||
|
||||
$content = [
|
||||
'location' => $loginUrl,
|
||||
'msg' => '重置密码成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,8 +5,6 @@ namespace App\Http\Web\Services;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Auth as AuthService;
|
||||
use App\Services\Frontend\Account\Register as RegisterService;
|
||||
use App\Services\Frontend\Account\RegisterByEmail as RegisterByEmailService;
|
||||
use App\Services\Frontend\Account\RegisterByPhone as RegisterByPhoneService;
|
||||
use App\Validators\Account as AccountValidator;
|
||||
use App\Validators\Captcha as CaptchaValidator;
|
||||
|
||||
@ -34,24 +32,8 @@ class Account extends Service
|
||||
$user = $userRepo->findById($account->id);
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function registerByEmail()
|
||||
{
|
||||
$service = new RegisterByEmailService();
|
||||
|
||||
$user = $service->handle();
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function registerByPhone()
|
||||
{
|
||||
$service = new RegisterByPhoneService();
|
||||
|
||||
$user = $service->handle();
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function loginByPassword()
|
||||
|
@ -8,7 +8,7 @@
|
||||
</div>
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.reset_pwd'}) }}">
|
||||
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.reset_pwd'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
@ -23,19 +23,24 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-inline verify-input-inline">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
<div class="layui-inline verify-btn-inline">
|
||||
<button id="cv-verify-emit" class="layui-btn layui-btn-primary layui-btn-disabled" type="button">获取验证码</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<span id="cv-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="cv-verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="cv-verify-btn" class="verify-btn-ok layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即重置</button>
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即重置</button>
|
||||
<input id="cv-ticket" type="hidden" name="ticket">
|
||||
<input id="cv-rand" type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -7,19 +7,25 @@
|
||||
<a><cite>登录</cite></a>
|
||||
</div>
|
||||
|
||||
<div class="layui-tab layui-tab-brief login-tab">
|
||||
<ul class="layui-tab-title kg-tab-title">
|
||||
<li class="layui-this">密码登录</li>
|
||||
<li>验证码登录</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{{ partial('account/login_by_password') }}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{{ partial('account/login_by_verify') }}
|
||||
<div class="login-container module">
|
||||
<div class="layui-tab layui-tab-brief login-tab">
|
||||
<ul class="layui-tab-title kg-tab-title">
|
||||
<li class="layui-this">密码登录</li>
|
||||
<li>验证码登录</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{{ partial('account/login_by_password') }}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{{ partial('account/login_by_verify') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="login-link" href="{{ url({'for':'web.account.register'}) }}">免费注册</a>
|
||||
<a class="forget-link" href="{{ url({'for':'web.account.forget_pwd'}) }}">忘记密码</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -1,4 +1,4 @@
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.pwd_login'}) }}">
|
||||
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.pwd_login'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
@ -15,15 +15,15 @@
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-btn" class="layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide verify-btn"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="verify-btn" class="verify-btn-ok layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
<input id="ticket" type="hidden" name="ticket">
|
||||
<input id="rand" type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -1,4 +1,4 @@
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.verify_login'}) }}">
|
||||
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.verify_login'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
@ -7,21 +7,26 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-inline verify-input-inline">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
<div class="layui-inline verify-btn-inline">
|
||||
<button id="cv-verify-emit" class="layui-btn layui-btn-primary layui-btn-disabled" type="button">获取验证码</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<span id="cv-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="cv-verify-btn" class="verify-btn layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<span id="cv-verify-btn" class="verify-btn-ok layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即登录</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input id="cv-ticket" type="hidden" name="ticket">
|
||||
<input id="cv-rand" type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
@ -8,11 +8,11 @@
|
||||
</div>
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.do_register'}) }}">
|
||||
<form class="layui-form account-form" method="POST" action="{{ url({'for':'web.account.do_register'}) }}">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
<input id="cv-account" class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@ -23,20 +23,25 @@
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<div class="layui-inline verify-input-inline">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-tips" class="btn-verify layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
<div class="layui-inline verify-btn-inline">
|
||||
<button id="cv-verify-emit" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" disabled="disabled" lay-submit="true" lay-filter="go">立即注册</button>
|
||||
<span id="cv-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="cv-verify-btn" class="verify-btn-ok layui-btn layui-btn-primary layui-btn-disabled layui-btn-fluid layui-hide"><i class="layui-icon layui-icon-ok"></i>验证成功</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="cv-submit-btn" class="layui-btn layui-btn-fluid layui-btn-disabled" disabled="disabled" lay-submit="true" lay-filter="go">立即注册</button>
|
||||
<input type="hidden" name="return_url" value="{{ return_url }}">
|
||||
<input id="cv-ticket" type="hidden" name="ticket">
|
||||
<input id="cv-rand" type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -47,6 +52,6 @@
|
||||
{% block include_js %}
|
||||
|
||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
||||
{{ js_include('web/js/captcha.js') }}
|
||||
{{ js_include('web/js/captcha.verify.js') }}
|
||||
|
||||
{% endblock %}
|
||||
|
@ -28,18 +28,18 @@
|
||||
</div>
|
||||
|
||||
<div class="user layui-layout-right">
|
||||
{% if auth_user %}
|
||||
{% if auth_user.id > 0 %}
|
||||
<ul class="layui-nav">
|
||||
<li class="layui-nav-item"><a href="{{ url({'for':'web.my.courses'}) }}">消息</a></li>
|
||||
<li class="layui-nav-item">
|
||||
<a href="javascript:">{{ auth_user.name }}</a>
|
||||
<dl class="layui-nav-child">
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">我的课程</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">我的收藏</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">我的咨询</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">我的订单</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">个人设置</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }} }}">退出登录</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }}">我的课程</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }}">我的收藏</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }}">我的咨询</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }}">我的订单</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.my.courses'}) }}">个人设置</a></dd>
|
||||
<dd><a href="{{ url({'for':'web.account.logout'}) }}">退出登录</a></dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -66,7 +66,7 @@ class Common
|
||||
|
||||
public static function phone($str)
|
||||
{
|
||||
$pattern = '/^(13[0-9]|15[0-3]|15[5-9]|180|18[5-9])[0-9]{8}$/';
|
||||
$pattern = '/^1(3|4|5|6|7|9)[0-9]{9}$/';
|
||||
|
||||
return preg_match($pattern, $str) ? true : false;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ class PasswordReset extends FrontendService
|
||||
|
||||
$accountValidator = new AccountValidator();
|
||||
|
||||
$account = $accountValidator->checkLoginName($post['account']);
|
||||
$account = $accountValidator->checkAccount($post['account']);
|
||||
|
||||
$accountValidator->checkPassword($post['new_password']);
|
||||
|
||||
|
@ -15,7 +15,7 @@ class PasswordResetByEmail extends FrontendService
|
||||
|
||||
$accountValidator = new AccountValidator();
|
||||
|
||||
$account = $accountValidator->checkAccountByEmail($post['email']);
|
||||
$account = $accountValidator->checkAccount($post['email']);
|
||||
|
||||
$accountValidator->checkPassword($post['new_password']);
|
||||
|
||||
|
@ -15,7 +15,7 @@ class PasswordResetByPhone extends FrontendService
|
||||
|
||||
$accountValidator = new AccountValidator();
|
||||
|
||||
$account = $accountValidator->checkAccountByPhone($post['phone']);
|
||||
$account = $accountValidator->checkAccount($post['phone']);
|
||||
|
||||
$accountValidator->checkPassword($post['new_password']);
|
||||
|
||||
|
@ -21,6 +21,8 @@ class Register extends FrontendService
|
||||
|
||||
$accountValidator = new AccountValidator();
|
||||
|
||||
$accountValidator->checkLoginName($post['account']);
|
||||
|
||||
$data = [];
|
||||
|
||||
if (CommonValidator::phone($post['account'])) {
|
||||
|
@ -34,9 +34,9 @@ class ChapterInfo extends FrontendService
|
||||
|
||||
public function handle($id)
|
||||
{
|
||||
$chapter = $this->checkChapter($id);
|
||||
$chapter = $this->checkChapterCache($id);
|
||||
|
||||
$course = $this->checkCourse($chapter->course_id);
|
||||
$course = $this->checkCourseCache($chapter->course_id);
|
||||
|
||||
$this->course = $course;
|
||||
|
||||
|
@ -35,17 +35,7 @@ class ChapterList extends FrontendService
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($user->id == 0) {
|
||||
foreach ($chapters as &$chapter) {
|
||||
foreach ($chapter['children'] as &$lesson) {
|
||||
$lesson['me'] = [
|
||||
'owned' => $this->ownedCourse || $lesson['free'] ? 1 : 0,
|
||||
'progress' => 0,
|
||||
'duration' => 0,
|
||||
];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($user->id > 0 && $this->courseUser) {
|
||||
$mappings = $this->getLearningMappings($course->id, $user->id, $this->courseUser->plan_id);
|
||||
foreach ($chapters as &$chapter) {
|
||||
foreach ($chapter['children'] as &$lesson) {
|
||||
@ -56,6 +46,16 @@ class ChapterList extends FrontendService
|
||||
];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($chapters as &$chapter) {
|
||||
foreach ($chapter['children'] as &$lesson) {
|
||||
$lesson['me'] = [
|
||||
'owned' => $this->ownedCourse || $lesson['free'] ? 1 : 0,
|
||||
'progress' => 0,
|
||||
'duration' => 0,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $chapters;
|
||||
|
@ -22,7 +22,7 @@ class Verify extends MailerService
|
||||
|
||||
$minutes = 5;
|
||||
|
||||
$code = $verify->getSmsCode($email, 60 * $minutes);
|
||||
$code = $verify->getEmailCode($email, 60 * $minutes);
|
||||
|
||||
$subject = '邮件验证码';
|
||||
|
||||
|
@ -15,10 +15,10 @@ class Account extends Validator
|
||||
|
||||
public function checkAccount($name)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = null;
|
||||
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
if (CommonValidator::email($name)) {
|
||||
$account = $accountRepo->findByEmail($name);
|
||||
} elseif (CommonValidator::phone($name)) {
|
||||
@ -34,38 +34,14 @@ class Account extends Validator
|
||||
return $account;
|
||||
}
|
||||
|
||||
public function checkAccountByEmail($email)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findByEmail($email);
|
||||
|
||||
if (!$account) {
|
||||
throw new BadRequestException('account.not_found');
|
||||
}
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
public function checkAccountByPhone($phone)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findByPhone($phone);
|
||||
|
||||
if (!$account) {
|
||||
throw new BadRequestException('account.not_found');
|
||||
}
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
public function checkLoginName($name)
|
||||
{
|
||||
$isPhone = CommonValidator::phone($name);
|
||||
$isEmail = CommonValidator::email($name);
|
||||
|
||||
if (!$isPhone && !$isEmail) {
|
||||
$loginNameOk = $isPhone || $isEmail;
|
||||
|
||||
if (!$loginNameOk) {
|
||||
throw new BadRequestException('account.invalid_login_name');
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ use Phalcon\Mvc\User\Component;
|
||||
class Validator extends Component
|
||||
{
|
||||
|
||||
public function checkAuthUser(array $authUser)
|
||||
public function checkAuthUser($authUser)
|
||||
{
|
||||
if (empty($authUser['id'])) {
|
||||
throw new UnauthorizedException('sys.unauthorized');
|
||||
|
@ -27,12 +27,14 @@ class Verify extends Validator
|
||||
return $email;
|
||||
}
|
||||
|
||||
public function checkCode($name, $code)
|
||||
public function checkCode($identity, $code)
|
||||
{
|
||||
if (CommonValidator::email($name)) {
|
||||
$this->checkEmailCode($name, $code);
|
||||
} elseif (CommonValidator::phone($name)) {
|
||||
$this->checkSmsCode($name, $code);
|
||||
if (CommonValidator::email($identity)) {
|
||||
$this->checkEmailCode($identity, $code);
|
||||
} elseif (CommonValidator::phone($identity)) {
|
||||
$this->checkSmsCode($identity, $code);
|
||||
} else {
|
||||
throw new BadRequestException('verify.unsupported_identity');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.kg-btn-verify {
|
||||
.kg-verify-btn-ok {
|
||||
color: green;
|
||||
}
|
||||
|
||||
|
@ -419,7 +419,7 @@ body {
|
||||
}
|
||||
|
||||
.package-item {
|
||||
margin-bottom: 25px;
|
||||
margin-bottom: 20px;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
|
||||
@ -469,7 +469,7 @@ body {
|
||||
|
||||
.package-course-list {
|
||||
width: 580px;
|
||||
height: 170px;
|
||||
height: 180px;
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
}
|
||||
@ -484,9 +484,11 @@ body {
|
||||
|
||||
.package-course-card {
|
||||
width: 175px;
|
||||
height: 160px;
|
||||
display: inline-block;
|
||||
margin-right: 8px;
|
||||
vertical-align: top;
|
||||
box-shadow: 0 4px 8px 0 rgba(7, 17, 27, 0.1);
|
||||
}
|
||||
|
||||
.package-course-card .cover {
|
||||
@ -502,6 +504,8 @@ body {
|
||||
|
||||
.package-course-card .title {
|
||||
font-size: 12px;
|
||||
padding: 0 3px;
|
||||
text-align: center;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
@ -785,28 +789,30 @@ body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.verify-tips-btn {
|
||||
.verify-btn-ok {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.register-container {
|
||||
padding: 40px 30px;
|
||||
background-color: #fff;
|
||||
.account-form {
|
||||
width: 540px;
|
||||
}
|
||||
|
||||
.register-container .layui-form {
|
||||
width: 50%;
|
||||
.account-form .verify-input-inline {
|
||||
width: 308px;
|
||||
}
|
||||
|
||||
.account-form .verify-btn-inline {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.login-container {
|
||||
|
||||
}
|
||||
|
||||
.login-tab {
|
||||
padding: 20px 30px;
|
||||
background-color: #fff;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.login-tab .layui-tab-content {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.login-tab .layui-form {
|
||||
width: 50%;
|
||||
}
|
@ -5,11 +5,11 @@ var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#ticket').val(res.ticket);
|
||||
$('#rand').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-btn').removeClass('layui-hide');
|
||||
$('#submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||
}
|
||||
}
|
||||
);
|
@ -5,24 +5,41 @@ var captcha = new TencentCaptcha(
|
||||
$('#cv-captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('#cv-account').val(),
|
||||
ticket: res.ticket,
|
||||
rand: res.randstr
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#cv-ticket').val(res.ticket);
|
||||
$('#cv-rand').val(res.randstr);
|
||||
$('#cv-captcha-btn').remove();
|
||||
$('#cv-submit-btn').removeAttr('disabled');
|
||||
$('#cv-verify-btn').removeClass('layui-hide');
|
||||
$('#cv-verify-emit').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||
}
|
||||
}
|
||||
);
|
||||
);
|
||||
|
||||
$('#cv-verify-emit').on('click', function () {
|
||||
var account = $('#cv-account').val();
|
||||
var regEmail = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
|
||||
var regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/;
|
||||
var isEmail = regEmail.test(account);
|
||||
var isPhone = regPhone.test(account);
|
||||
if (isEmail || isPhone) {
|
||||
var postUrl = null;
|
||||
var postData = {
|
||||
ticket: $('#cv-ticket').val(),
|
||||
rand: $('#cv-rand').val(),
|
||||
};
|
||||
if (isPhone) {
|
||||
postData.phone = account;
|
||||
postUrl = '/verify/sms/code';
|
||||
} else if (isEmail) {
|
||||
postData.email = account;
|
||||
postUrl = '/verify/email/code';
|
||||
}
|
||||
$.post(postUrl, postData, function (res) {
|
||||
if (res.code === 0) {
|
||||
$('#cv-submit-btn').removeClass('layui-btn-disabled').removeAttr('disabled');
|
||||
layer.msg('发送验证码成功', {icon: 1});
|
||||
} else {
|
||||
layer.msg('发送验证码失败', {icon: 2});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user