79 lines
2.5 KiB
PHP
79 lines
2.5 KiB
PHP
<?php
|
||
namespace app\admin\controller;
|
||
|
||
use app\model\Admins;
|
||
use Firebase\JWT\JWT;
|
||
use support\Redis;
|
||
use Webman\Http\Request;
|
||
|
||
class LoginController extends base
|
||
{
|
||
public function Index(Request $request) {
|
||
$time = time();
|
||
|
||
$username = $request->post('username');
|
||
$password = $request->post('password');
|
||
if(empty($username)) {
|
||
return $this->error(1001);
|
||
}
|
||
if(empty($password)) {
|
||
return $this->error(1002);
|
||
}
|
||
|
||
$admin = Admins::where('username', $username)->find();
|
||
// $admin->password = 'Aa123456';
|
||
// $admin->save();
|
||
if(empty($admin)) {
|
||
return $this->error(1002,'没有找到管理员'); //没有找到管理员
|
||
}
|
||
|
||
if(!$admin->checkPwd($password)) {
|
||
return $this->error(1003,'密码校验错误'); //密码校验错误
|
||
}
|
||
|
||
if($admin->status == 0) {
|
||
return $this->error(1004,'管理员状态错误'); //管理员状态错误
|
||
}
|
||
|
||
// 记录当天第一次上线时间
|
||
if (date('Y-m-d') != date('Y-m-d',$admin->start_work_time)){
|
||
$admin->start_work_time = $time;
|
||
$admin->save();
|
||
}
|
||
|
||
$data = [
|
||
'id'=> $admin->id,
|
||
'username' => $admin->username,
|
||
'name' => $admin->name,
|
||
'avatar' => $admin->avatar,
|
||
'is_super' => $admin->is_super,
|
||
'is_franchisee' => $admin->is_franchisee
|
||
];
|
||
|
||
$payload = array(
|
||
"iat" => $time, // token 的创建时间
|
||
"nbf" => $time, // token 的生效时间
|
||
"exp" => $time+3600*24, // token 的过期时间
|
||
"data"=> $data // 携带数据
|
||
);
|
||
|
||
$keyId = "keyId";
|
||
$token = JWT::encode($payload, config('app.jwt_key_admin'), 'HS256', $keyId);
|
||
|
||
return $this->success(['token'=> $token]);
|
||
}
|
||
|
||
public function Logout(Request $request) {
|
||
// 判断在线时长,低于8小时不可下线
|
||
$admin = Admins::where('id', $request->admin->id)->find();
|
||
$workTime = time() - $admin->start_work_time;
|
||
if ($admin->is_order == 1 && $workTime < 60*60*8) {
|
||
return $this->error(1004,'未满8小时暂不能下线,请联系管理员');
|
||
}
|
||
$md5 = md5($request->token);
|
||
Redis::set('Admin:logout:'.$md5, time() , 'EX', 3600*24);
|
||
setcookie('Admin-Token', '', time() - 3600);
|
||
return $this->success(null);
|
||
}
|
||
}
|