mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-08-06 14:31:39 +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>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||||
<div class="layui-input-block">
|
<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="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>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -31,7 +31,8 @@
|
|||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"></label>
|
<label class="layui-form-label"></label>
|
||||||
<div class="layui-input-block">
|
<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="ticket">
|
||||||
<input type="hidden" name="rand">
|
<input type="hidden" name="rand">
|
||||||
</div>
|
</div>
|
||||||
@ -61,8 +62,8 @@
|
|||||||
$('input[name=ticket]').val(res.ticket);
|
$('input[name=ticket]').val(res.ticket);
|
||||||
$('input[name=rand]').val(res.randstr);
|
$('input[name=rand]').val(res.randstr);
|
||||||
$('#captcha-btn').remove();
|
$('#captcha-btn').remove();
|
||||||
$('#submit-btn').removeAttr('disabled');
|
|
||||||
$('#verify-btn').removeClass('layui-hide');
|
$('#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\Http\Web\Services\Account as AccountService;
|
||||||
use App\Services\Frontend\Account\EmailUpdate as EmailUpdateService;
|
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\PasswordUpdate as PasswordUpdateService;
|
||||||
use App\Services\Frontend\Account\PhoneUpdate as PhoneUpdateService;
|
use App\Services\Frontend\Account\PhoneUpdate as PhoneUpdateService;
|
||||||
|
|
||||||
@ -18,6 +19,10 @@ class AccountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function registerAction()
|
public function registerAction()
|
||||||
{
|
{
|
||||||
|
if ($this->authUser->id > 0) {
|
||||||
|
$this->response->redirect('/');
|
||||||
|
}
|
||||||
|
|
||||||
$service = new AccountService();
|
$service = new AccountService();
|
||||||
|
|
||||||
$captcha = $service->getSectionSettings('captcha');
|
$captcha = $service->getSectionSettings('captcha');
|
||||||
@ -33,7 +38,18 @@ class AccountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function doRegisterAction()
|
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()
|
public function loginAction()
|
||||||
{
|
{
|
||||||
|
if ($this->authUser->id > 0) {
|
||||||
|
$this->response->redirect('/');
|
||||||
|
}
|
||||||
|
|
||||||
$service = new AccountService();
|
$service = new AccountService();
|
||||||
|
|
||||||
$captcha = $service->getSectionSettings('captcha');
|
$captcha = $service->getSectionSettings('captcha');
|
||||||
@ -60,7 +80,14 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
$service->loginByPassword();
|
$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();
|
$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()
|
public function forgetPasswordAction()
|
||||||
{
|
{
|
||||||
|
if ($this->authUser->id > 0) {
|
||||||
|
$this->response->redirect('/');
|
||||||
|
}
|
||||||
|
|
||||||
$service = new AccountService();
|
$service = new AccountService();
|
||||||
|
|
||||||
$captcha = $service->getSectionSettings('captcha');
|
$captcha = $service->getSectionSettings('captcha');
|
||||||
@ -105,7 +143,18 @@ class AccountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function resetPasswordAction()
|
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\Repos\User as UserRepo;
|
||||||
use App\Services\Auth as AuthService;
|
use App\Services\Auth as AuthService;
|
||||||
use App\Services\Frontend\Account\Register as RegisterService;
|
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\Account as AccountValidator;
|
||||||
use App\Validators\Captcha as CaptchaValidator;
|
use App\Validators\Captcha as CaptchaValidator;
|
||||||
|
|
||||||
@ -34,24 +32,8 @@ class Account extends Service
|
|||||||
$user = $userRepo->findById($account->id);
|
$user = $userRepo->findById($account->id);
|
||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
$this->auth->saveAuthInfo($user);
|
||||||
}
|
|
||||||
|
|
||||||
public function registerByEmail()
|
return $user;
|
||||||
{
|
|
||||||
$service = new RegisterByEmailService();
|
|
||||||
|
|
||||||
$user = $service->handle();
|
|
||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerByPhone()
|
|
||||||
{
|
|
||||||
$service = new RegisterByPhoneService();
|
|
||||||
|
|
||||||
$user = $service->handle();
|
|
||||||
|
|
||||||
$this->auth->saveAuthInfo($user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loginByPassword()
|
public function loginByPassword()
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="register-container">
|
<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">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
@ -23,19 +23,24 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
<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">
|
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||||
</div>
|
</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>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<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-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>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -7,19 +7,25 @@
|
|||||||
<a><cite>登录</cite></a>
|
<a><cite>登录</cite></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-tab layui-tab-brief login-tab">
|
<div class="login-container module">
|
||||||
<ul class="layui-tab-title kg-tab-title">
|
<div class="layui-tab layui-tab-brief login-tab">
|
||||||
<li class="layui-this">密码登录</li>
|
<ul class="layui-tab-title kg-tab-title">
|
||||||
<li>验证码登录</li>
|
<li class="layui-this">密码登录</li>
|
||||||
</ul>
|
<li>验证码登录</li>
|
||||||
<div class="layui-tab-content">
|
</ul>
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-tab-content">
|
||||||
{{ partial('account/login_by_password') }}
|
<div class="layui-tab-item layui-show">
|
||||||
</div>
|
{{ partial('account/login_by_password') }}
|
||||||
<div class="layui-tab-item">
|
</div>
|
||||||
{{ partial('account/login_by_verify') }}
|
<div class="layui-tab-item">
|
||||||
|
{{ partial('account/login_by_verify') }}
|
||||||
|
</div>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% 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">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
@ -15,15 +15,15 @@
|
|||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||||
<div class="layui-input-block">
|
<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="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>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<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="return_url" value="{{ return_url }}">
|
||||||
<input type="hidden" name="ticket">
|
<input id="ticket" type="hidden" name="ticket">
|
||||||
<input type="hidden" name="rand">
|
<input id="rand" type="hidden" name="rand">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</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">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||||
<div class="layui-input-block">
|
<div class="layui-input-block">
|
||||||
@ -7,21 +7,26 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
<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">
|
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||||
</div>
|
</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>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||||
<div class="layui-input-block">
|
<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-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>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<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 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>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
@ -8,11 +8,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="register-container">
|
<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">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
<label class="layui-form-label"><i class="layui-icon layui-icon-username"></i></label>
|
||||||
<div class="layui-input-block">
|
<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>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
@ -23,20 +23,25 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
<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">
|
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="layui-inline verify-btn-inline">
|
||||||
<div class="layui-form-item">
|
<button id="cv-verify-emit" class="layui-btn layui-btn-primary layui-btn-disabled" type="button" disabled="disabled">获取验证码</button>
|
||||||
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item">
|
<div class="layui-form-item">
|
||||||
<div class="layui-input-block">
|
<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 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>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -47,6 +52,6 @@
|
|||||||
{% block include_js %}
|
{% block include_js %}
|
||||||
|
|
||||||
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
{{ js_include('https://ssl.captcha.qq.com/TCaptcha.js',false) }}
|
||||||
{{ js_include('web/js/captcha.js') }}
|
{{ js_include('web/js/captcha.verify.js') }}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -28,18 +28,18 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="user layui-layout-right">
|
<div class="user layui-layout-right">
|
||||||
{% if auth_user %}
|
{% if auth_user.id > 0 %}
|
||||||
<ul class="layui-nav">
|
<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="{{ url({'for':'web.my.courses'}) }}">消息</a></li>
|
||||||
<li class="layui-nav-item">
|
<li class="layui-nav-item">
|
||||||
<a href="javascript:">{{ auth_user.name }}</a>
|
<a href="javascript:">{{ auth_user.name }}</a>
|
||||||
<dl class="layui-nav-child">
|
<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>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -66,7 +66,7 @@ class Common
|
|||||||
|
|
||||||
public static function phone($str)
|
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;
|
return preg_match($pattern, $str) ? true : false;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ class PasswordReset extends FrontendService
|
|||||||
|
|
||||||
$accountValidator = new AccountValidator();
|
$accountValidator = new AccountValidator();
|
||||||
|
|
||||||
$account = $accountValidator->checkLoginName($post['account']);
|
$account = $accountValidator->checkAccount($post['account']);
|
||||||
|
|
||||||
$accountValidator->checkPassword($post['new_password']);
|
$accountValidator->checkPassword($post['new_password']);
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class PasswordResetByEmail extends FrontendService
|
|||||||
|
|
||||||
$accountValidator = new AccountValidator();
|
$accountValidator = new AccountValidator();
|
||||||
|
|
||||||
$account = $accountValidator->checkAccountByEmail($post['email']);
|
$account = $accountValidator->checkAccount($post['email']);
|
||||||
|
|
||||||
$accountValidator->checkPassword($post['new_password']);
|
$accountValidator->checkPassword($post['new_password']);
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class PasswordResetByPhone extends FrontendService
|
|||||||
|
|
||||||
$accountValidator = new AccountValidator();
|
$accountValidator = new AccountValidator();
|
||||||
|
|
||||||
$account = $accountValidator->checkAccountByPhone($post['phone']);
|
$account = $accountValidator->checkAccount($post['phone']);
|
||||||
|
|
||||||
$accountValidator->checkPassword($post['new_password']);
|
$accountValidator->checkPassword($post['new_password']);
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ class Register extends FrontendService
|
|||||||
|
|
||||||
$accountValidator = new AccountValidator();
|
$accountValidator = new AccountValidator();
|
||||||
|
|
||||||
|
$accountValidator->checkLoginName($post['account']);
|
||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
if (CommonValidator::phone($post['account'])) {
|
if (CommonValidator::phone($post['account'])) {
|
||||||
|
@ -34,9 +34,9 @@ class ChapterInfo extends FrontendService
|
|||||||
|
|
||||||
public function handle($id)
|
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;
|
$this->course = $course;
|
||||||
|
|
||||||
|
@ -35,17 +35,7 @@ class ChapterList extends FrontendService
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->id == 0) {
|
if ($user->id > 0 && $this->courseUser) {
|
||||||
foreach ($chapters as &$chapter) {
|
|
||||||
foreach ($chapter['children'] as &$lesson) {
|
|
||||||
$lesson['me'] = [
|
|
||||||
'owned' => $this->ownedCourse || $lesson['free'] ? 1 : 0,
|
|
||||||
'progress' => 0,
|
|
||||||
'duration' => 0,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$mappings = $this->getLearningMappings($course->id, $user->id, $this->courseUser->plan_id);
|
$mappings = $this->getLearningMappings($course->id, $user->id, $this->courseUser->plan_id);
|
||||||
foreach ($chapters as &$chapter) {
|
foreach ($chapters as &$chapter) {
|
||||||
foreach ($chapter['children'] as &$lesson) {
|
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;
|
return $chapters;
|
||||||
|
@ -22,7 +22,7 @@ class Verify extends MailerService
|
|||||||
|
|
||||||
$minutes = 5;
|
$minutes = 5;
|
||||||
|
|
||||||
$code = $verify->getSmsCode($email, 60 * $minutes);
|
$code = $verify->getEmailCode($email, 60 * $minutes);
|
||||||
|
|
||||||
$subject = '邮件验证码';
|
$subject = '邮件验证码';
|
||||||
|
|
||||||
|
@ -15,10 +15,10 @@ class Account extends Validator
|
|||||||
|
|
||||||
public function checkAccount($name)
|
public function checkAccount($name)
|
||||||
{
|
{
|
||||||
$accountRepo = new AccountRepo();
|
|
||||||
|
|
||||||
$account = null;
|
$account = null;
|
||||||
|
|
||||||
|
$accountRepo = new AccountRepo();
|
||||||
|
|
||||||
if (CommonValidator::email($name)) {
|
if (CommonValidator::email($name)) {
|
||||||
$account = $accountRepo->findByEmail($name);
|
$account = $accountRepo->findByEmail($name);
|
||||||
} elseif (CommonValidator::phone($name)) {
|
} elseif (CommonValidator::phone($name)) {
|
||||||
@ -34,38 +34,14 @@ class Account extends Validator
|
|||||||
return $account;
|
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)
|
public function checkLoginName($name)
|
||||||
{
|
{
|
||||||
$isPhone = CommonValidator::phone($name);
|
$isPhone = CommonValidator::phone($name);
|
||||||
$isEmail = CommonValidator::email($name);
|
$isEmail = CommonValidator::email($name);
|
||||||
|
|
||||||
if (!$isPhone && !$isEmail) {
|
$loginNameOk = $isPhone || $isEmail;
|
||||||
|
|
||||||
|
if (!$loginNameOk) {
|
||||||
throw new BadRequestException('account.invalid_login_name');
|
throw new BadRequestException('account.invalid_login_name');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ use Phalcon\Mvc\User\Component;
|
|||||||
class Validator extends Component
|
class Validator extends Component
|
||||||
{
|
{
|
||||||
|
|
||||||
public function checkAuthUser(array $authUser)
|
public function checkAuthUser($authUser)
|
||||||
{
|
{
|
||||||
if (empty($authUser['id'])) {
|
if (empty($authUser['id'])) {
|
||||||
throw new UnauthorizedException('sys.unauthorized');
|
throw new UnauthorizedException('sys.unauthorized');
|
||||||
|
@ -27,12 +27,14 @@ class Verify extends Validator
|
|||||||
return $email;
|
return $email;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkCode($name, $code)
|
public function checkCode($identity, $code)
|
||||||
{
|
{
|
||||||
if (CommonValidator::email($name)) {
|
if (CommonValidator::email($identity)) {
|
||||||
$this->checkEmailCode($name, $code);
|
$this->checkEmailCode($identity, $code);
|
||||||
} elseif (CommonValidator::phone($name)) {
|
} elseif (CommonValidator::phone($identity)) {
|
||||||
$this->checkSmsCode($name, $code);
|
$this->checkSmsCode($identity, $code);
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException('verify.unsupported_identity');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.kg-btn-verify {
|
.kg-verify-btn-ok {
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,7 +419,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.package-item {
|
.package-item {
|
||||||
margin-bottom: 25px;
|
margin-bottom: 20px;
|
||||||
border-bottom: 1px dashed #ccc;
|
border-bottom: 1px dashed #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,7 +469,7 @@ body {
|
|||||||
|
|
||||||
.package-course-list {
|
.package-course-list {
|
||||||
width: 580px;
|
width: 580px;
|
||||||
height: 170px;
|
height: 180px;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
@ -484,9 +484,11 @@ body {
|
|||||||
|
|
||||||
.package-course-card {
|
.package-course-card {
|
||||||
width: 175px;
|
width: 175px;
|
||||||
|
height: 160px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
|
box-shadow: 0 4px 8px 0 rgba(7, 17, 27, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.package-course-card .cover {
|
.package-course-card .cover {
|
||||||
@ -502,6 +504,8 @@ body {
|
|||||||
|
|
||||||
.package-course-card .title {
|
.package-course-card .title {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
padding: 0 3px;
|
||||||
|
text-align: center;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -785,28 +789,30 @@ body {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.verify-tips-btn {
|
.verify-btn-ok {
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
|
||||||
.register-container {
|
.account-form {
|
||||||
padding: 40px 30px;
|
width: 540px;
|
||||||
background-color: #fff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.register-container .layui-form {
|
.account-form .verify-input-inline {
|
||||||
width: 50%;
|
width: 308px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.account-form .verify-btn-inline {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-container {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-tab {
|
.login-tab {
|
||||||
padding: 20px 30px;
|
margin: 0;
|
||||||
background-color: #fff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-tab .layui-tab-content {
|
.login-tab .layui-tab-content {
|
||||||
padding-top: 30px;
|
padding-top: 30px;
|
||||||
}
|
|
||||||
|
|
||||||
.login-tab .layui-form {
|
|
||||||
width: 50%;
|
|
||||||
}
|
}
|
@ -5,11 +5,11 @@ var captcha = new TencentCaptcha(
|
|||||||
$('#captcha-btn').attr('data-app-id'),
|
$('#captcha-btn').attr('data-app-id'),
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.ret === 0) {
|
if (res.ret === 0) {
|
||||||
$('input[name=ticket]').val(res.ticket);
|
$('#ticket').val(res.ticket);
|
||||||
$('input[name=rand]').val(res.randstr);
|
$('#rand').val(res.randstr);
|
||||||
$('#captcha-btn').remove();
|
$('#captcha-btn').remove();
|
||||||
$('#submit-btn').removeAttr('disabled');
|
|
||||||
$('#verify-btn').removeClass('layui-hide');
|
$('#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'),
|
$('#cv-captcha-btn').attr('data-app-id'),
|
||||||
function (res) {
|
function (res) {
|
||||||
if (res.ret === 0) {
|
if (res.ret === 0) {
|
||||||
$.ajax({
|
$('#cv-ticket').val(res.ticket);
|
||||||
type: 'POST',
|
$('#cv-rand').val(res.randstr);
|
||||||
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-captcha-btn').remove();
|
$('#cv-captcha-btn').remove();
|
||||||
$('#cv-submit-btn').removeAttr('disabled');
|
|
||||||
$('#cv-verify-btn').removeClass('layui-hide');
|
$('#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