197 lines
7.2 KiB
PHP
197 lines
7.2 KiB
PHP
@extends('admin.content')
|
||
|
||
@section('title', '谷歌验证')
|
||
|
||
@section('content')
|
||
<div class="layui-card">
|
||
<div class="layui-card-header">谷歌验证(Google Authenticator)</div>
|
||
<div class="layui-card-body">
|
||
<p style="margin-bottom:8px;">
|
||
绑定状态:
|
||
@if($bound)
|
||
<span style="color:#16b777;">已绑定</span>
|
||
@else
|
||
<span style="color:#999;">未绑定</span>
|
||
@endif
|
||
</p>
|
||
<p style="margin-bottom:16px;">
|
||
登录验证:
|
||
@if($enabled)
|
||
<span style="color:#16b777;">已开启(登录必须填验证码)</span>
|
||
@elseif($bound)
|
||
<span style="color:#ffb800;">未开启(登录不校验,查看助记词仍需验证)</span>
|
||
@else
|
||
<span style="color:#999;">未开启</span>
|
||
@endif
|
||
</p>
|
||
|
||
@if(!$bound)
|
||
<form class="layui-form" lay-filter="LAY-ga-prepare" style="max-width:520px;">
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">登录密码</label>
|
||
<div class="layui-input-block">
|
||
<input type="password" name="password" required lay-verify="required" class="layui-input" autocomplete="current-password">
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<div class="layui-input-block">
|
||
<button class="layui-btn" lay-submit lay-filter="LAY-ga-prepare">获取绑定二维码</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
|
||
<div id="LAY-ga-bind-box" style="display:none;max-width:520px;margin-top:24px;">
|
||
<div id="LAY-ga-qr" style="margin-bottom:12px;"></div>
|
||
<p style="margin-bottom:12px;">密钥:<code id="LAY-ga-secret"></code></p>
|
||
<form class="layui-form" lay-filter="LAY-ga-bind">
|
||
<input type="hidden" name="GASecret" id="LAY-ga-secret-input">
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">验证码</label>
|
||
<div class="layui-input-block">
|
||
<input type="text" name="GAKey" required lay-verify="required" class="layui-input" inputmode="numeric" autocomplete="one-time-code" placeholder="扫码后输入 6 位验证码">
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">登录验证</label>
|
||
<div class="layui-input-block">
|
||
<input type="checkbox" name="login_verify" value="1" title="登录时校验谷歌验证码">
|
||
<div class="layui-form-mid layui-word-aux">可不勾选。不勾选则登录不校验,之后也可再开。</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<div class="layui-input-block">
|
||
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="LAY-ga-bind">确认绑定</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
@else
|
||
<form class="layui-form" style="max-width:520px;">
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">登录密码</label>
|
||
<div class="layui-input-block">
|
||
<input type="password" name="password" id="LAY-ga-password" class="layui-input" autocomplete="current-password">
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">验证码</label>
|
||
<div class="layui-input-block">
|
||
<input type="text" name="GACode" id="LAY-ga-code" class="layui-input" inputmode="numeric" autocomplete="one-time-code" placeholder="开关登录验证 / 解绑都需要">
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<div class="layui-input-block">
|
||
@if($enabled)
|
||
<button type="button" class="layui-btn layui-btn-warm" id="LAY-ga-close">关闭登录验证</button>
|
||
@else
|
||
<button type="button" class="layui-btn" id="LAY-ga-open">开启登录验证</button>
|
||
@endif
|
||
<button type="button" class="layui-btn layui-btn-danger" id="LAY-ga-unbind">解除绑定</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
@endsection
|
||
|
||
@push('scripts')
|
||
<script>
|
||
layui.use(['form', 'layer'], function () {
|
||
var form = layui.form, layer = layui.layer, $ = layui.$;
|
||
var token = @json(csrf_token());
|
||
var routes = @json($routes);
|
||
|
||
form.on('submit(LAY-ga-prepare)', function (data) {
|
||
$.ajax({
|
||
url: routes.prepare,
|
||
method: 'POST',
|
||
data: Object.assign({}, data.field, { _token: token }),
|
||
success: function (res) {
|
||
if (res.code === 201) {
|
||
layer.msg(res.msg, { icon: 0 }, function () { location.reload(); });
|
||
return;
|
||
}
|
||
if (res.code !== 0) return layer.msg(res.msg || '失败', { icon: 2 });
|
||
$('#LAY-ga-qr').html(res.qr_svg || '');
|
||
$('#LAY-ga-secret').text(res.secret || '');
|
||
$('#LAY-ga-secret-input').val(res.secret || '');
|
||
$('#LAY-ga-bind-box').show();
|
||
form.render('checkbox');
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || '请求失败', { icon: 2 });
|
||
}
|
||
});
|
||
return false;
|
||
});
|
||
|
||
form.on('submit(LAY-ga-bind)', function (data) {
|
||
var payload = Object.assign({}, data.field, { _token: token });
|
||
payload.login_verify = $('input[name=login_verify]').is(':checked') ? 1 : 0;
|
||
$.ajax({
|
||
url: routes.bind,
|
||
method: 'POST',
|
||
data: payload,
|
||
success: function (res) {
|
||
layer.msg(res.msg || '', { icon: res.code === 0 ? 1 : 2 }, function () {
|
||
if (res.code === 0) location.reload();
|
||
});
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || '绑定失败', { icon: 2 });
|
||
}
|
||
});
|
||
return false;
|
||
});
|
||
|
||
function toggle(open) {
|
||
$.ajax({
|
||
url: routes.toggle,
|
||
method: 'POST',
|
||
data: {
|
||
_token: token,
|
||
password: $('#LAY-ga-password').val(),
|
||
GACode: $('#LAY-ga-code').val(),
|
||
open: open
|
||
},
|
||
success: function (res) {
|
||
layer.msg(res.msg || '', { icon: res.code === 0 ? 1 : 2 }, function () {
|
||
if (res.code === 0) location.reload();
|
||
});
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || '操作失败', { icon: 2 });
|
||
}
|
||
});
|
||
}
|
||
|
||
$('#LAY-ga-open').on('click', function () { toggle(1); });
|
||
$('#LAY-ga-close').on('click', function () { toggle(0); });
|
||
|
||
$('#LAY-ga-unbind').on('click', function () {
|
||
layer.confirm('确定解除谷歌验证绑定?解除后无法查看助记词明文。', function (index) {
|
||
$.ajax({
|
||
url: routes.unbind,
|
||
method: 'POST',
|
||
data: {
|
||
_token: token,
|
||
password: $('#LAY-ga-password').val(),
|
||
GACode: $('#LAY-ga-code').val()
|
||
},
|
||
success: function (res) {
|
||
layer.close(index);
|
||
layer.msg(res.msg || '', { icon: res.code === 0 ? 1 : 2 }, function () {
|
||
if (res.code === 0) location.reload();
|
||
});
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && (xhr.responseJSON.message || xhr.responseJSON.msg)) || '解绑失败', { icon: 2 });
|
||
}
|
||
});
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
@endpush
|