定制 hnraytek/flame-auth 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hnraytek/flame-auth

Composer 安装命令:

composer require hnraytek/flame-auth

包简介

flame auth middleware

README 文档

README

基于 Flame Module Kernel 的身份认证模块,提供 Token 管理和路由鉴权功能。

✨ 特性

  • 🛡️ 基于中间件的路由鉴权
  • 🔑 Token 生成、验证和管理
  • 🎯 支持 #[NeedAuth]#[NoAuth] 属性标记
  • 📦 灵活的鉴权策略(allow/block)
  • 🔄 支持 Refresh Token 机制

📋 安装

composer require hnraytek/flame-auth

📚 配置说明

'auth' => [
    'enable' => false,          // 是否开启全局鉴权
    'strategy' => 'allow',      // allow: 只检查 NeedAuth | block: 只允许 NoAuth

    'token_name' => 'user',     // 请求头中的 token key,header[token_name]
    'key' => 'your-secret-key', // 加密密钥(请修改!)
    'algo' => 'ripemd160',      // 加密算法
    'table' => '',              // 数据表名(如自行更改请保证数据结构正确,默认留空)
    'expire' => 604800,         // 默认 Token 过期时间(秒)
],

🚀 快速开始

1. 基础用法

use FlameModule\Attribute\NeedAuth;
use FlameModule\Auth\Attribute\NoAuth;

class UserController
{
    #[NoAuth]
    public function login()
    {
        // 无需鉴权的登录接口,strategy 为 block 生效 
    }

    #[NeedAuth]
    public function profile()
    {
        // 需要鉴权的用户信息接口,strategy 为 allow 才生效
    }
}

2. 使用 AuthApiController

use FlameModule\Auth\Attribute\NoAuth;use FlameModule\Auth\Controller\AuthApiController;

class ApiController extends AuthApiController
{
    protected string $tokenType = 'user'; // (必填)token 类型,支持多种类型(如 `user`、`admin`、`member` 等)

    #[NoAuth]
    public function login()
    {
        // 验证用户...
        $this->setUserId($userId); // 设置用户ID并生成 token
        
        $this->success([
            'token' => $this->getToken(),
            'refresh_token' => $this->getRefreshToken(),
        ]);
    }
    
    public function userInfo()
    {
        $userId = $this->getUserId(); // 获取当前登录用户ID
        // ...
    }
    
    public function logout()
    {
        $this->clearToken(); // 清除 token
        $this->success(['message' => 'Logout success']);
    }
}

tips:继承该类从而统一 $tokenType 的设置(如 frontendbackend

3. Token 管理

use FlameModule\Auth\Token;

$tokenService = app(Token::class);

// 生成 token
$token = Token::generateToken();

// 设置 token
$tokenService->set($token, 'user', $userId, 7 * 24 * 3600);

// 获取 token 数据
$data = $tokenService->get($token);

// 验证 token
$isValid = $tokenService->check($token, 'user', $userId);

// 删除 token
$tokenService->delete($token);

// 清理用户所有 token
$tokenService->clear($userId, 'user');

📝 API 说明

AuthApiController 方法

方法 说明
getUserId() 获取当前登录用户 ID
setUserId($userId, $keepTime, $keep) 设置用户 ID 并生成新 token,$keepTime 默认 1200 秒,$keep 为 true 时同时生成 refresh token
getToken() 获取当前 token
getRefreshToken() 获取刷新 token
setRefreshToken($keepTime) 生成刷新 token,返回 refresh token 字符串
clearToken($userId) 清除指定用户的 token(默认清除当前用户)
checkAuth() 检查用户是否登录,未登录返回 401
checkToken() 验证当前 token 是否有效
isLoggedIn() 判断用户是否已登录

Token 服务方法

方法 说明
generateToken() 生成随机 token(静态方法)
getRequestToken() 从请求头获取 token
set($token, $type, $userId, $expire) 存储 token
get($token) 获取 token 数据
check($token, $type, $userId) 验证 token
delete($token) 删除指定 token
clear($userId, $type) 清理用户所有 token
tokenExpirationCheck($token) 检查 token 是否过期

📝 鉴权策略

Allow 模式(推荐)

  • 默认允许所有路由访问
  • 只有标记 #[NeedAuth] 的路由需要鉴权
  • 适合大多数场景,不影响现有业务

Block 模式

  • 默认阻止所有路由访问
  • 只有标记 #[NoAuth] 的路由可以访问
  • 适合高安全性要求的场景

tips: 为了保持兼容性,推荐在所有路由增加 #[NoAuth]#[NeedAuth]

📝 异常处理

模块会抛出 TokenExpirationException 异常(HTTP 401),建议在全局异常处理器中统一处理:

use FlameModule\Auth\Exception\TokenExpirationException;

if ($e instanceof TokenExpirationException) {
    return json([
        'code' => 401,
        'message' => 'Token has expired or is invalid',
    ], 401);
}

📝 注意事项

⚠️ 安全提示

  • 务必修改配置中的 key 为随机密钥
  • 生产环境建议开启鉴权(enable => true
  • 定期清理过期 token(模块会自动清理)

💡 最佳实践

  • 使用 AuthApiController 作为 API 控制器基类
  • 登录接口使用 #[NoAuth] 标记
  • 敏感操作接口使用 #[NeedAuth] 标记
  • 合理设置 token 过期时间

📝 许可证

Apache-2.0 License

👤 作者

🤝 贡献

欢迎提交 Issue 和 Pull Request!

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2026-06-27

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固