98 lines
2.8 KiB
PHP
98 lines
2.8 KiB
PHP
<?php
|
||
|
||
namespace app\controller;
|
||
|
||
use app\model\Access;
|
||
use app\model\Admin as AdminModel;
|
||
use Firebase\JWT\JWT;
|
||
use think\facade\Db;
|
||
use think\facade\Validate;
|
||
use think\Request;
|
||
|
||
class Login
|
||
{
|
||
public function index()
|
||
{
|
||
echo '这里是登陆界面';
|
||
return;
|
||
}
|
||
|
||
public function check(Request $request)
|
||
{
|
||
|
||
$data = $request->param();
|
||
// var_dump($data);
|
||
//错误集合
|
||
$errors = [];
|
||
//验证
|
||
$validate = Validate::rule([
|
||
'username' => 'unique:admin,username^password'
|
||
]);
|
||
|
||
$result = $validate->check([
|
||
'username' => $data['username'],
|
||
'password' => $data['password']
|
||
]);
|
||
|
||
//错误提示,反向操作
|
||
//如果用户名和密码同时比对存在,那其实就是正确的
|
||
if ($result) {
|
||
$errors[] = '用户名或密码错误~';
|
||
}
|
||
|
||
//判断跳转
|
||
if (!empty($errors)) {
|
||
return json([
|
||
'code' => 1,
|
||
'message' => $errors,
|
||
]);
|
||
} else {
|
||
|
||
session('admin', $data['username']);
|
||
$admin_id = AdminModel::where('username', $data['username'])->value('id');
|
||
$roles = AdminModel::where('id', $admin_id)->value('roles');
|
||
$permission = AdminModel::where('id', $admin_id)->value('permission');
|
||
$token = $this->GennerteToken($admin_id);
|
||
|
||
|
||
if (!empty($permission)) {
|
||
$pp = explode(',', substr($permission, 0, -1));
|
||
} else {
|
||
$pp = array();
|
||
}
|
||
return json([
|
||
'code' => 200,
|
||
'message' => '登陆成功',
|
||
'permissions' => $roles,
|
||
'authority' => $pp,
|
||
'adminId' => $admin_id,
|
||
'token' => $token
|
||
]);
|
||
}
|
||
|
||
}
|
||
|
||
private function GennerteToken($admin_id)
|
||
{
|
||
$key = 'zuxingzdz';
|
||
$token = array(
|
||
"iss" => $key, //签发者 可以为空
|
||
"aud" => '', //面象的用户,可以为空
|
||
"iat" => time(), //签发时间
|
||
"nbf" => time() + 3, //在什么时候jwt开始生效 (这里表示生成100秒后才生效)
|
||
"exp" => time() + 1296000, //token 过期时间
|
||
"data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
|
||
'admin_id' => $admin_id,
|
||
]
|
||
);
|
||
|
||
$jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token
|
||
return $jwt;
|
||
}
|
||
|
||
public function out()
|
||
{
|
||
session('admin', null);
|
||
return json(['code' => 200, 'massage' => '退出成功']);
|
||
}
|
||
} |