chore: 首次提交 - 关联 GitHub fnvtk/MBTI_wang

Made-with: Cursor
This commit is contained in:
卡若
2026-03-17 12:39:38 +08:00
commit eb510304c0
259 changed files with 60464 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
<?php
namespace app\controller\admin;
use app\BaseController;
use app\model\User as UserModel;
use app\common\service\JwtService;
use think\facade\Request;
use think\facade\Db;
/**
* 后台管理员认证控制器
*/
class Auth extends BaseController
{
/**
* 后台管理员登录(兼容旧版路由)
* @return \think\response\Json
*/
public function login()
{
$username = Request::param('username', '');
$password = Request::param('password', '');
if (empty($username) || empty($password)) {
return error('用户名和密码不能为空', 400);
}
// 查找用户(使用原生查询获取密码字段)- 只允许普通管理员和企业管理员登录
$user = Db::name('users')
->where('username', $username)
->where('role', 'in', ['admin', 'enterprise_admin']) // 只允许普通管理员和企业管理员登录
->find();
if (!$user) {
return error('用户名或密码错误', 401);
}
// 验证密码
if (!password_verify($password, $user['password'])) {
return error('用户名或密码错误', 401);
}
// 检查账号状态
if ($user['status'] != 1) {
return error('账号已被禁用', 403);
}
// 更新登录信息(使用时间戳,驼峰命名)
Db::name('users')
->where('id', $user['id'])
->update([
'lastLoginTime' => time(),
'lastLoginIp' => Request::ip(),
'updatedAt' => time()
]);
// 生成Token
$payload = [
'userId' => $user['id'],
'username' => $user['username'],
'role' => $user['role'],
'enterpriseId' => $user['enterpriseId'] ?? null
];
$token = JwtService::generateToken($payload);
unset($user['password']);
return success([
'token' => $token,
'expires_in' => config('jwt.expire'),
'user' => $user
], '登录成功');
}
/**
* 管理员登录(新路由:/api/v1/auth/admin/login
* @return \think\response\Json
*/
public function adminLogin()
{
$username = Request::param('username', '');
$password = Request::param('password', '');
if (empty($username) || empty($password)) {
return error('用户名和密码不能为空', 400);
}
// 查找用户(使用原生查询获取密码字段)
$user = Db::name('users')
->where('username', $username)
->where('role', 'in', ['admin', 'enterprise_admin']) // 只允许普通管理员和企业管理员
->find();
if (!$user) {
return error('用户名或密码错误', 401);
}
// 验证密码
if (!password_verify($password, $user['password'])) {
return error('用户名或密码错误', 401);
}
// 检查账号状态
if ($user['status'] != 1) {
return error('账号已被禁用', 403);
}
// 更新登录信息(使用时间戳,驼峰命名)
Db::name('users')
->where('id', $user['id'])
->update([
'lastLoginTime' => time(),
'lastLoginIp' => Request::ip(),
'updatedAt' => time()
]);
// 生成Token
$payload = [
'userId' => $user['id'],
'username' => $user['username'],
'role' => $user['role'],
'enterpriseId' => $user['enterpriseId'] ?? null
];
$token = JwtService::generateToken($payload);
unset($user['password']);
return success([
'token' => $token,
'expires_in' => config('jwt.expire'),
'user' => $user
], '登录成功');
}
/**
* 超级管理员登录(新路由:/api/v1/auth/superadmin/login
* @return \think\response\Json
*/
public function superAdminLogin()
{
$username = Request::param('username', '');
$password = Request::param('password', '');
if (empty($username) || empty($password)) {
return error('用户名和密码不能为空', 400);
}
// 查找用户(使用原生查询获取密码字段)
$user = Db::name('users')
->where('username', $username)
->where('role', 'superadmin') // 只允许超级管理员
->find();
if (!$user) {
return error('用户名或密码错误', 401);
}
// 验证密码
if (!password_verify($password, $user['password'])) {
return error('用户名或密码错误', 401);
}
// 检查账号状态
if ($user['status'] != 1) {
return error('账号已被禁用', 403);
}
// 更新登录信息(使用时间戳,驼峰命名)
Db::name('users')
->where('id', $user['id'])
->update([
'lastLoginTime' => time(),
'lastLoginIp' => Request::ip(),
'updatedAt' => time()
]);
// 生成Token
$payload = [
'userId' => $user['id'],
'username' => $user['username'],
'role' => $user['role']
];
$token = JwtService::generateToken($payload);
unset($user['password']);
return success([
'token' => $token,
'expires_in' => config('jwt.expire'),
'user' => $user
], '登录成功');
}
/**
* 获取当前登录管理员信息(需要认证)
* @return \think\response\Json
*/
public function me()
{
$user = $this->request->user ?? null;
if (!$user) {
return error('未登录', 401);
}
$userModel = Db::name('users')->where('id', $user['userId'] ?? $user['user_id'] ?? null)->find();
if (!$userModel) {
return error('用户不存在', 404);
}
// 检查角色(必须是普通管理员或企业管理员,不包括超级管理员)
if (!in_array($userModel['role'], ['admin', 'enterprise_admin'])) {
return error('无权限访问后台', 403);
}
unset($userModel['password']);
return success($userModel);
}
/**
* 退出登录(需要认证)
* @return \think\response\Json
*/
public function logout()
{
$user = $this->request->user ?? null;
if ($user && isset($user['userId'])) {
JwtService::deleteToken($user['userId']);
} elseif ($user && isset($user['user_id'])) {
JwtService::deleteToken($user['user_id']);
}
return success(null, '退出成功');
}
/**
* 刷新Token
* @return \think\response\Json
*/
public function refresh()
{
$token = JwtService::getTokenFromRequest($this->request);
if (!$token) {
return error('未提供Token', 401);
}
$newToken = JwtService::refreshToken($token);
if (!$newToken) {
return error('Token无效或已过期', 401);
}
return success([
'token' => $newToken,
'expires_in' => config('jwt.expire')
], '刷新成功');
}
}