mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-24 20:06:09 +08:00
整理登录注册代码
This commit is contained in:
parent
75f969c874
commit
c0e405a51f
@ -22,7 +22,7 @@
|
||||
<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="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" 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-tips" class="kg-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>
|
||||
@ -55,7 +55,7 @@
|
||||
var $ = layui.jquery;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('app-id'),
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
|
@ -4,7 +4,6 @@ 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 +17,21 @@ class AccountController extends Controller
|
||||
* @Get("/register", name="web.account.register")
|
||||
*/
|
||||
public function registerAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
|
||||
$returnUrl = $this->request->getHTTPReferer();
|
||||
|
||||
$this->view->setVar('return_url', $returnUrl);
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/register", name="web.account.do_register")
|
||||
*/
|
||||
public function doRegisterAction()
|
||||
{
|
||||
|
||||
}
|
||||
@ -27,7 +41,38 @@ class AccountController extends Controller
|
||||
*/
|
||||
public function loginAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
|
||||
$returnUrl = $this->request->getHTTPReferer();
|
||||
|
||||
$this->view->setVar('return_url', $returnUrl);
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/login", name="web.account.pwd_login")
|
||||
*/
|
||||
public function loginByPasswordAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->loginByPassword();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/verify/login", name="web.account.verify_login")
|
||||
*/
|
||||
public function loginByVerifyAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->loginByVerify();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -46,89 +91,21 @@ class AccountController extends Controller
|
||||
* @Get("/password/reset", name="web.account.reset_pwd")
|
||||
*/
|
||||
public function resetPasswordAction()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/phone/register", name="web.account.register_by_phone")
|
||||
*/
|
||||
public function registerByPhoneAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->registerByPhone();
|
||||
$captcha = $service->getSectionSettings('captcha');
|
||||
|
||||
$content = [
|
||||
'location' => $this->request->getHTTPReferer(),
|
||||
'msg' => '注册账户成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
$this->view->pick('account/reset_password');
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/email/register", name="web.account.register_by_email")
|
||||
* @Post("/password/reset", name="web.account.do_reset_pwd")
|
||||
*/
|
||||
public function registerByEmailAction()
|
||||
public function doResetPasswordAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->registerByPhone();
|
||||
|
||||
$content = [
|
||||
'msg' => '注册账户成功',
|
||||
];
|
||||
|
||||
return $this->jsonSuccess($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/login", name="web.account.login_by_pwd")
|
||||
*/
|
||||
public function loginByPasswordAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->loginByPassword();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/verify/login", name="web.account.login_by_verify")
|
||||
*/
|
||||
public function loginByVerifyAction()
|
||||
{
|
||||
$service = new AccountService();
|
||||
|
||||
$service->loginByVerify();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/email/reset", name="web.account.reset_pwd_by_email")
|
||||
*/
|
||||
public function resetPasswordByEmailAction()
|
||||
{
|
||||
$service = new PasswordResetService();
|
||||
|
||||
$service->handle();
|
||||
|
||||
return $this->jsonSuccess(['msg' => '重置密码成功']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/phone/reset", name="web.account.reset_pwd_by_phone")
|
||||
*/
|
||||
public function resetPasswordByPhoneAction()
|
||||
{
|
||||
$service = new PasswordResetService();
|
||||
|
||||
$service->handle();
|
||||
|
||||
return $this->jsonSuccess(['msg' => '重置密码成功']);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -156,7 +133,7 @@ class AccountController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/password/update", name="web.account.update_password")
|
||||
* @Post("/password/update", name="web.account.update_pwd")
|
||||
*/
|
||||
public function updatePasswordAction()
|
||||
{
|
||||
|
@ -4,6 +4,7 @@ namespace App\Http\Web\Controllers;
|
||||
|
||||
use App\Services\Frontend\Verify\EmailCode as EmailCodeService;
|
||||
use App\Services\Frontend\Verify\SmsCode as SmsCodeService;
|
||||
use App\Services\Frontend\Verify\VerifyCode as VerifyCodeService;
|
||||
use App\Traits\Response as ResponseTrait;
|
||||
|
||||
/**
|
||||
@ -14,6 +15,18 @@ class VerifyController extends \Phalcon\Mvc\Controller
|
||||
|
||||
use ResponseTrait;
|
||||
|
||||
/**
|
||||
* @Post("/code", name="verify.code")
|
||||
*/
|
||||
public function verifyCodeAction()
|
||||
{
|
||||
$service = new VerifyCodeService();
|
||||
|
||||
$service->handle();
|
||||
|
||||
return $this->jsonSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/sms/code", name="verify.sms_code")
|
||||
*/
|
||||
|
@ -2,7 +2,9 @@
|
||||
|
||||
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;
|
||||
@ -21,6 +23,19 @@ class Account extends Service
|
||||
$this->auth = $this->getDI()->get('auth');
|
||||
}
|
||||
|
||||
public function register()
|
||||
{
|
||||
$service = new RegisterService();
|
||||
|
||||
$account = $service->handle();
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$user = $userRepo->findById($account->id);
|
||||
|
||||
$this->auth->saveAuthInfo($user);
|
||||
}
|
||||
|
||||
public function registerByEmail()
|
||||
{
|
||||
$service = new RegisterByEmailService();
|
||||
|
20
app/Http/Web/Views/account/login.volt
Normal file
20
app/Http/Web/Views/account/login.volt
Normal file
@ -0,0 +1,20 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<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>
|
||||
|
||||
{% endblock %}
|
35
app/Http/Web/Views/account/login_by_password.volt
Normal file
35
app/Http/Web/Views/account/login_by_password.volt
Normal file
@ -0,0 +1,35 @@
|
||||
<form class="layui-form kg-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">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="password" name="password" autocomplete="off" placeholder="密码" lay-verify="required">
|
||||
</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">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</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="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="verify-tips" class="kg-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 class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" 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">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
29
app/Http/Web/Views/account/login_by_verify.volt
Normal file
29
app/Http/Web/Views/account/login_by_verify.volt
Normal file
@ -0,0 +1,29 @@
|
||||
<form class="layui-form kg-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">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</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">
|
||||
<input class="layui-input" type="text" name="verify_code" placeholder="验证码" lay-verify="required">
|
||||
</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="phone-captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid" data-app-id="{{ captcha.app_id }}">点击完成验证</span>
|
||||
<span id="phone-verify-tips" class="kg-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 class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" 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">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
81
app/Http/Web/Views/account/register.volt
Normal file
81
app/Http/Web/Views/account/register.volt
Normal file
@ -0,0 +1,81 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-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">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="password" name="password" autocomplete="off" placeholder="密码" lay-verify="required">
|
||||
</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">
|
||||
<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>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" 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">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
|
||||
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
|
||||
|
||||
<script>
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('input[name=account]').val(),
|
||||
ticket: $('input[name=ticket]').val(),
|
||||
rand: $('input[name=rand]').val()
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
|
||||
},
|
||||
});
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
80
app/Http/Web/Views/account/reset_password.volt
Normal file
80
app/Http/Web/Views/account/reset_password.volt
Normal file
@ -0,0 +1,80 @@
|
||||
{% extends 'templates/base.volt' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="register-container">
|
||||
<form class="layui-form" method="POST" action="{{ url({'for':'web.account.do_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">
|
||||
<input class="layui-input" type="text" name="account" autocomplete="off" placeholder="手机 / 邮箱" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-password"></i></label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="password" name="new_password" autocomplete="off" placeholder="新密码" lay-verify="required">
|
||||
</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">
|
||||
<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>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button id="submit-btn" class="layui-btn layui-btn-fluid" lay-submit="true" lay-filter="go">立即重置</button>
|
||||
<input type="hidden" name="ticket">
|
||||
<input type="hidden" name="rand">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block inline_js %}
|
||||
|
||||
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
|
||||
|
||||
<script>
|
||||
var $ = layui.jquery;
|
||||
var layer = layui.layer;
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('data-app-id'),
|
||||
function (res) {
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/verify/code',
|
||||
data: {
|
||||
account: $('input[name=account]').val(),
|
||||
ticket: $('input[name=ticket]').val(),
|
||||
rand: $('input[name=rand]').val()
|
||||
},
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
|
||||
},
|
||||
});
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -2,10 +2,11 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('partials/macro_course') }}
|
||||
|
||||
{{ partial('course/list_filter') }}
|
||||
|
||||
<div class="course-list clearfix">
|
||||
{{ partial('partials/macro_course') }}
|
||||
{% for item in pager.items %}
|
||||
{{ course_card(item) }}
|
||||
{% endfor %}
|
||||
|
@ -26,23 +26,8 @@
|
||||
{{ partial('partials/footer') }}
|
||||
</div>
|
||||
|
||||
{{ js_include('lib/layui/layui.js') }}
|
||||
|
||||
<script>
|
||||
layui.use(['element', 'util'], function () {
|
||||
var element = layui.element;
|
||||
var util = layui.util;
|
||||
util.fixbar({
|
||||
bar1: true,
|
||||
click: function (type) {
|
||||
console.log(type);
|
||||
if (type === 'bar1') {
|
||||
alert('点击了bar1');
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
{{ js_include('lib/layui/layui.all.js') }}
|
||||
{{ js_include('web/js/common.js') }}
|
||||
|
||||
{% block include_js %}{% endblock %}
|
||||
|
||||
|
48
app/Services/Frontend/Account/Register.php
Normal file
48
app/Services/Frontend/Account/Register.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Frontend\Account;
|
||||
|
||||
use App\Library\Validators\Common as CommonValidator;
|
||||
use App\Models\Account as AccountModel;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use App\Validators\Account as AccountValidator;
|
||||
use App\Validators\Verify as VerifyValidator;
|
||||
|
||||
class Register extends FrontendService
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$post = $this->request->getPost();
|
||||
|
||||
$verifyValidator = new VerifyValidator();
|
||||
|
||||
$verifyValidator->checkCode($post['account'], $post['verify_code']);
|
||||
|
||||
$accountValidator = new AccountValidator();
|
||||
|
||||
$data = [];
|
||||
|
||||
if (CommonValidator::phone($post['account'])) {
|
||||
|
||||
$data['phone'] = $accountValidator->checkPhone($post['account']);
|
||||
|
||||
$accountValidator->checkIfPhoneTaken($post['account']);
|
||||
|
||||
} elseif (CommonValidator::email($post['account'])) {
|
||||
|
||||
$data['email'] = $accountValidator->checkEmail($post['account']);
|
||||
|
||||
$accountValidator->checkIfEmailTaken($post['account']);
|
||||
}
|
||||
|
||||
$data['password'] = $accountValidator->checkPassword($post['password']);
|
||||
|
||||
$account = new AccountModel();
|
||||
|
||||
$account->create($data);
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
}
|
36
app/Services/Frontend/Verify/VerifyCode.php
Normal file
36
app/Services/Frontend/Verify/VerifyCode.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Frontend\Verify;
|
||||
|
||||
use App\Library\Validators\Common as CommonValidator;
|
||||
use App\Services\Frontend\Service as FrontendService;
|
||||
use App\Services\Mailer\Verify as VerifyMailerService;
|
||||
use App\Services\Smser\Verify as VerifySmserService;
|
||||
use App\Validators\Captcha as CaptchaValidator;
|
||||
|
||||
class VerifyCode extends FrontendService
|
||||
{
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$post = $this->request->getPost();
|
||||
|
||||
$captchaValidator = new CaptchaValidator();
|
||||
|
||||
$captchaValidator->checkCode($post['ticket'], $post['rand']);
|
||||
|
||||
if (CommonValidator::phone($post['account'])) {
|
||||
|
||||
$service = new VerifySmserService();
|
||||
|
||||
$service->handle($post['account']);
|
||||
|
||||
} elseif (CommonValidator::email($post['account'])) {
|
||||
|
||||
$service = new VerifyMailerService();
|
||||
|
||||
$service->handle($post['account']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -13,11 +13,19 @@ use App\Repos\User as UserRepo;
|
||||
class Account extends Validator
|
||||
{
|
||||
|
||||
public function checkAccount($id)
|
||||
public function checkAccount($name)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = $accountRepo->findById($id);
|
||||
$account = null;
|
||||
|
||||
if (CommonValidator::email($name)) {
|
||||
$account = $accountRepo->findByEmail($name);
|
||||
} elseif (CommonValidator::phone($name)) {
|
||||
$account = $accountRepo->findByPhone($name);
|
||||
} else {
|
||||
$account = $accountRepo->findById($name);
|
||||
}
|
||||
|
||||
if (!$account) {
|
||||
throw new BadRequestException('account.not_found');
|
||||
@ -52,6 +60,16 @@ class Account extends Validator
|
||||
return $account;
|
||||
}
|
||||
|
||||
public function checkLoginName($name)
|
||||
{
|
||||
$isPhone = CommonValidator::phone($name);
|
||||
$isEmail = CommonValidator::email($name);
|
||||
|
||||
if (!$isPhone && !$isEmail) {
|
||||
throw new BadRequestException('account.invalid_login_name');
|
||||
}
|
||||
}
|
||||
|
||||
public function checkPhone($phone)
|
||||
{
|
||||
if (!CommonValidator::phone($phone)) {
|
||||
@ -110,32 +128,13 @@ class Account extends Validator
|
||||
}
|
||||
}
|
||||
|
||||
public function checkLoginName($name)
|
||||
{
|
||||
$accountRepo = new AccountRepo();
|
||||
|
||||
$account = null;
|
||||
|
||||
if (CommonValidator::email($name)) {
|
||||
$account = $accountRepo->findByEmail($name);
|
||||
} elseif (CommonValidator::phone($name)) {
|
||||
$account = $accountRepo->findByPhone($name);
|
||||
}
|
||||
|
||||
if (!$account) {
|
||||
throw new BadRequestException('account.login_name_incorrect');
|
||||
}
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
public function checkVerifyLogin($name, $code)
|
||||
{
|
||||
$verify = new Verify();
|
||||
|
||||
$verify->checkCode($name, $code);
|
||||
|
||||
$account = $this->checkLoginName($name);
|
||||
$account = $this->checkAccount($name);
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
@ -144,7 +143,7 @@ class Account extends Validator
|
||||
|
||||
public function checkUserLogin($name, $password)
|
||||
{
|
||||
$account = $this->checkLoginName($name);
|
||||
$account = $this->checkAccount($name);
|
||||
|
||||
$hash = PasswordUtil::hash($password, $account->salt);
|
||||
|
||||
|
@ -40,8 +40,8 @@ $error['captcha.invalid_code'] = '无效的验证码';
|
||||
*/
|
||||
$error['account.not_found'] = '账号不存在';
|
||||
$error['account.login_block'] = '账号被锁定,无法登录';
|
||||
$error['account.login_name_incorrect'] = '登录账号不正确';
|
||||
$error['account.login_password_incorrect'] = '登录密码不正确';
|
||||
$error['account.invalid_login_name'] = '无效的登录账户名';
|
||||
$error['account.invalid_email'] = '无效的电子邮箱';
|
||||
$error['account.invalid_phone'] = '无效的手机号';
|
||||
$error['account.invalid_password'] = '无效的密码(字母或数字6-16位)';
|
||||
|
@ -51,8 +51,11 @@ body {
|
||||
}
|
||||
|
||||
.search .layui-input {
|
||||
border: none;
|
||||
height: 30px;
|
||||
font-size: 12px;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
#main {
|
||||
@ -310,4 +313,30 @@ body {
|
||||
.course-body .sidebar {
|
||||
float: left;
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.btn-verify {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.register-container {
|
||||
padding: 50px 30px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.register-container .layui-form {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.login-tab {
|
||||
padding: 30px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.login-tab .layui-tab-content {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.login-tab .layui-form {
|
||||
width: 50%;
|
||||
}
|
79
public/static/web/js/common.js
Normal file
79
public/static/web/js/common.js
Normal file
@ -0,0 +1,79 @@
|
||||
var $ = layui.jquery;
|
||||
var element = layui.element;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
var util = layui.util;
|
||||
|
||||
$.ajaxSetup({
|
||||
beforeSend: function (xhr) {
|
||||
xhr.setRequestHeader('X-Csrf-Token', $('meta[name="csrf-token"]').attr('content'));
|
||||
}
|
||||
});
|
||||
|
||||
util.fixbar({
|
||||
bar1: true,
|
||||
click: function (type) {
|
||||
console.log(type);
|
||||
if (type === 'bar1') {
|
||||
alert('点击了bar1');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
form.on('submit(go)', function (data) {
|
||||
var submit = $(this);
|
||||
submit.attr('disabled', true).addClass('layui-btn-disabled');
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: data.form.action,
|
||||
data: data.field,
|
||||
success: function (res) {
|
||||
var icon = res.code === 0 ? 1 : 2;
|
||||
if (res.msg) {
|
||||
layer.msg(res.msg, {icon: icon});
|
||||
}
|
||||
if (res.location) {
|
||||
setTimeout(function () {
|
||||
window.location.href = res.location;
|
||||
}, 1500);
|
||||
} else {
|
||||
submit.attr('disabled', false).removeClass('layui-btn-disabled');
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
submit.attr('disabled', false).removeClass('layui-btn-disabled');
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.kg-delete').on('click', function () {
|
||||
var url = $(this).attr('data-url');
|
||||
var tips = '确定要删除吗?';
|
||||
layer.confirm(tips, function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
if (res.location) {
|
||||
setTimeout(function () {
|
||||
window.location.href = res.location;
|
||||
}, 1500);
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
},
|
||||
error: function (xhr) {
|
||||
var json = JSON.parse(xhr.responseText);
|
||||
layer.msg(json.msg, {icon: 2});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('.kg-back').on('click', function () {
|
||||
window.history.back();
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user