新增后台登录验证码功能

优化登录相关配置
pull/28/head v1.0.0.20171206_beta
Karson 2017-12-06 17:28:24 +08:00
parent 4149fce838
commit 0c953105c8
6 changed files with 35 additions and 11 deletions

View File

@ -2,7 +2,10 @@
namespace app\admin\controller; namespace app\admin\controller;
use app\admin\model\AdminLog;
use app\common\controller\Backend; use app\common\controller\Backend;
use think\Config;
use think\Hook;
use think\Validate; use think\Validate;
/** /**
@ -64,13 +67,18 @@ class Index extends Backend
'password' => $password, 'password' => $password,
'__token__' => $token, '__token__' => $token,
]; ];
$validate = new Validate($rule); if (Config::get('fastadmin.login_captcha'))
{
$rule['captcha'] = 'require|captcha';
$data['captcha'] = $this->request->post('captcha');
}
$validate = new Validate($rule, [], ['username' => __('Username'), 'password' => __('Password'), 'captcha' => __('Captcha')]);
$result = $validate->check($data); $result = $validate->check($data);
if (!$result) if (!$result)
{ {
$this->error($validate->getError(), $url, ['token' => $this->request->token()]); $this->error($validate->getError(), $url, ['token' => $this->request->token()]);
} }
\app\admin\model\AdminLog::setTitle(__('Login')); AdminLog::setTitle(__('Login'));
$result = $this->auth->login($username, $password, $keeplogin ? 86400 : 0); $result = $this->auth->login($username, $password, $keeplogin ? 86400 : 0);
if ($result === true) if ($result === true)
{ {
@ -87,9 +95,9 @@ class Index extends Backend
{ {
$this->redirect($url); $this->redirect($url);
} }
$background = cdnurl("/assets/img/loginbg.jpg"); $background = cdnurl(Config::get('fastadmin.login_background'));
$this->view->assign('background', $background); $this->view->assign('background', $background);
\think\Hook::listen("login_init", $this->request); Hook::listen("login_init", $this->request);
return $this->view->fetch(); return $this->view->fetch();
} }

View File

@ -39,4 +39,5 @@ return [
'Docs' => '官方文档', 'Docs' => '官方文档',
'Forum' => '交流社区', 'Forum' => '交流社区',
'QQ qun' => 'QQ交流群', 'QQ qun' => 'QQ交流群',
'Captcha' => '验证码',
]; ];

View File

@ -5,6 +5,7 @@ namespace app\admin\library;
use app\admin\model\Admin; use app\admin\model\Admin;
use fast\Random; use fast\Random;
use fast\Tree; use fast\Tree;
use think\Config;
use think\Cookie; use think\Cookie;
use think\Request; use think\Request;
use think\Session; use think\Session;
@ -14,7 +15,6 @@ class Auth extends \fast\Auth
protected $requestUri = ''; protected $requestUri = '';
protected $breadcrumb = []; protected $breadcrumb = [];
protected $loginUnique = false; //是否同一账号同一时间只能在一个地方登录
protected $logined = false; //登录状态 protected $logined = false; //登录状态
public function __construct() public function __construct()
@ -165,7 +165,7 @@ class Auth extends \fast\Auth
return false; return false;
} }
//判断是否同一时间同一账号只能在一个地方登录 //判断是否同一时间同一账号只能在一个地方登录
if ($this->loginUnique) if (Config::get('fastadmin.login_unique'))
{ {
$my = Admin::get($admin->id); $my = Admin::get($admin->id);
if (!$my || $my->token != $admin->token) if (!$my || $my->token != $admin->token)

View File

@ -63,7 +63,7 @@
<div class="login-form"> <div class="login-form">
<img id="profile-img" class="profile-img-card" src="__CDN__/assets/img/avatar.png" /> <img id="profile-img" class="profile-img-card" src="__CDN__/assets/img/avatar.png" />
<p id="profile-name" class="profile-name-card"></p> <p id="profile-name" class="profile-name-card"></p>
<form action="" method="post" id="login-form"> <form action="" method="post" id="login-form">
<div id="errtips" class="hide"></div> <div id="errtips" class="hide"></div>
{:token()} {:token()}
@ -76,7 +76,15 @@
<div class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></div> <div class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></div>
<input type="password" class="form-control" id="pd-form-password" placeholder="{:__('Password')}" name="password" autocomplete="off" value="" data-rule="{:__('Password')}:required;password" /> <input type="password" class="form-control" id="pd-form-password" placeholder="{:__('Password')}" name="password" autocomplete="off" value="" data-rule="{:__('Password')}:required;password" />
</div> </div>
{if $config.fastadmin.login_captcha}
<div class="input-group">
<div class="input-group-addon"><span class="glyphicon glyphicon-option-horizontal" aria-hidden="true"></span></div>
<input type="text" name="captcha" class="form-control" placeholder="{:__('Captcha')}" data-rule="{:__('Captcha')}:required;length(4)" />
<span class="input-group-addon" style="padding:0;border:none;">
<img src="{:captcha_src()}" width="100" height="30" onclick="this.src = '{:captcha_src()}?r=' + Math.random();"/>
</span>
</div>
{/if}
<div class="form-group"> <div class="form-group">
<label class="inline" for="keeplogin"> <label class="inline" for="keeplogin">
<input type="checkbox" name="keeplogin" id="keeplogin" value="1" /> <input type="checkbox" name="keeplogin" id="keeplogin" value="1" />

View File

@ -244,7 +244,14 @@ return [
], ],
//FastAdmin配置 //FastAdmin配置
'fastadmin' => [ 'fastadmin' => [
'version' => '1.0.0.20171026_beta', //登录验证码
'api_url' => 'http://api.fastadmin.net', 'login_captcha' => false,
//是否同一账号同一时间只能在一个地方登录
'login_unique' => false,
//登录页默认背景图
'login_background' => "/assets/img/loginbg.jpg",
//版本号
'version' => '1.0.0.20171206_beta',
'api_url' => 'http://api.fastadmin.net',
], ],
]; ];

View File

@ -375,7 +375,7 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], functi
if (lastlogin) { if (lastlogin) {
lastlogin = JSON.parse(lastlogin); lastlogin = JSON.parse(lastlogin);
$("#profile-img").attr("src", Backend.api.cdnurl(lastlogin.avatar)); $("#profile-img").attr("src", Backend.api.cdnurl(lastlogin.avatar));
$("#pd-form-username").val(lastlogin.username); $("#profile-name").val(lastlogin.username);
} }
//让错误提示框居中 //让错误提示框居中