first commit
This commit is contained in:
174
application/traits/Auth.php
Normal file
174
application/traits/Auth.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
namespace app\traits;
|
||||
|
||||
use think\Request;
|
||||
use think\Validate;
|
||||
use think\facade\Session;
|
||||
use think\facade\Cookie;
|
||||
use app\model\UserModel as User;
|
||||
use app\behavior\LoginRecord;
|
||||
|
||||
trait Auth
|
||||
{
|
||||
public function authLogin(Request $request)
|
||||
{
|
||||
$err = $this->validateLogin($request);
|
||||
if ($err) {
|
||||
$this->error($err);
|
||||
}
|
||||
|
||||
// 正常输入登录
|
||||
$userModel = new User();
|
||||
$field = explode('|', $this->name());
|
||||
$user = $userModel::where($field[0], $request->param($field[0]))->find();
|
||||
|
||||
if (!$user) {
|
||||
$this->error('登录失败');
|
||||
}
|
||||
if (password_verify($request->param('password'), $user->password)) {
|
||||
Session::set('user', $user);
|
||||
# 记住登录
|
||||
$this->LoginRemember($user, $request);
|
||||
# 登录记录
|
||||
hook(LoginRecord::class, ['user' => $user]);
|
||||
$this->success('登录成功', url($this->redirect));
|
||||
}
|
||||
|
||||
$this->error('登录失败');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 记住登录
|
||||
* @return bool
|
||||
*/
|
||||
public function rememberLogin()
|
||||
{
|
||||
// 如果记住登录
|
||||
if (!Session::get('user') && Cookie::get('remember_token') && $this->checkRememberToken()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退出
|
||||
* @return void
|
||||
*/
|
||||
public function authLogout()
|
||||
{
|
||||
$user = Session::get('user');
|
||||
$user->remember_token = null;
|
||||
$user->save();
|
||||
Cookie::delete('remember_token');
|
||||
Session::delete('user');
|
||||
}
|
||||
/**
|
||||
* 验证
|
||||
* @param Request $request
|
||||
* @return array|bool
|
||||
*/
|
||||
protected function validateLogin(Request $request)
|
||||
{
|
||||
$validate = new Validate($this->rule());
|
||||
if (!$validate->check($request->except(['remember']))) {
|
||||
return $validate->getError();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录验证规则
|
||||
* @return array
|
||||
*/
|
||||
protected function rule()
|
||||
{
|
||||
return [
|
||||
$this->name() => 'require|token|alphaDash',
|
||||
'password|密码' => 'require|alphaDash',
|
||||
'captcha|验证码' => 'require|captcha'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置登录字段
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function name()
|
||||
{
|
||||
return 'name|用户名';
|
||||
}
|
||||
|
||||
/**
|
||||
* Remember Token
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function generateRememberToken()
|
||||
{
|
||||
return uniqid(md5(time()+rand(10000, 99999)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密 TOKEN
|
||||
*
|
||||
* @param $user_id
|
||||
* @param $remember_token
|
||||
* @return string
|
||||
*/
|
||||
protected function secretRememberToken($user_id, $remember_token)
|
||||
{
|
||||
list($key, $method, $iv) = $this->getSecret();
|
||||
return base64_encode(openssl_encrypt($user_id . ':' . $remember_token, $method, $key, OPENSSL_RAW_DATA, $iv));
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查remember token 是否正确
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function checkRememberToken()
|
||||
{
|
||||
if (!Cookie::has('remember_token')) {
|
||||
return false;
|
||||
}
|
||||
$rememberToken = Cookie::get('remember_token');
|
||||
// 解密
|
||||
list($key, $method, $iv) = $this->getSecret();
|
||||
list($userID) = explode(':', (openssl_decrypt(base64_decode($rememberToken), $method, $key, OPENSSL_RAW_DATA, $iv)));
|
||||
// 校验
|
||||
$user = (new User())->findBy($userID);
|
||||
Session::set('user', $user);
|
||||
return $user->remember_token == $rememberToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getSecret()
|
||||
{
|
||||
return ['admin_auth', 'AES-128-CBC', '1234567890123412'];
|
||||
}
|
||||
|
||||
/**
|
||||
* 记住
|
||||
*
|
||||
* @param $user
|
||||
* @return void
|
||||
*/
|
||||
protected function LoginRemember($user, Request $request)
|
||||
{
|
||||
if ($request->has('remember')) {
|
||||
$rememberToken = $this->secretRememberToken($user->id, $this->generateRememberToken());
|
||||
$user->remember_token = $rememberToken;
|
||||
Cookie::forever('remember_token', $rememberToken);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
80
application/traits/ControllerTrait.php
Normal file
80
application/traits/ControllerTrait.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2018/11/12 0012
|
||||
* Time: 上午 11:43
|
||||
*/
|
||||
namespace app\traits;
|
||||
|
||||
use think\facade\Session;
|
||||
use app\component\upload\UploadInterface;
|
||||
use app\component\upload\LocalUpload;
|
||||
|
||||
trait ControllerTrait
|
||||
{
|
||||
protected $vars = [];
|
||||
|
||||
/**
|
||||
* 绑定实现
|
||||
*
|
||||
* @time at 2018年11月16日
|
||||
* @return void
|
||||
*/
|
||||
public function initialize()
|
||||
{
|
||||
bind(UploadInterface::class, LocalUpload::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否登录
|
||||
*
|
||||
* @time at 2018年11月15日
|
||||
* @return bool
|
||||
*/
|
||||
protected function isLogin()
|
||||
{
|
||||
return $this->getLoginUser() ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录用户
|
||||
*
|
||||
* @time at 2018年11月15日
|
||||
* @return mixed
|
||||
*/
|
||||
protected function getLoginUser()
|
||||
{
|
||||
return Session::get('user');
|
||||
}
|
||||
|
||||
/**
|
||||
* fetch 重写
|
||||
*
|
||||
* @time at 2018年11月15日
|
||||
* @param string $template
|
||||
* @param array $vars
|
||||
* @param array $config
|
||||
* @return mixed
|
||||
*/
|
||||
protected function fetch($template = '', $vars = [], $config = [])
|
||||
{
|
||||
$vars = array_merge($this->vars, $vars);
|
||||
|
||||
return $this->view->fetch($template, $vars, $config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Template Vars
|
||||
*
|
||||
* @time at 2018年11月12日
|
||||
* @param $name
|
||||
* @param $value
|
||||
* @return void
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
// TODO: Implement __set() method.
|
||||
$this->vars[$name] = $value;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user