egg-passport 的原理, 是否依赖数据库

原理

egg-passport 是 Egg.js 框架基于 Passport.js 实现的身份认证插件,其核心原理是:

  1. 集成 Passport.js 生态
    基于 Passport.js 的策略(Strategy)机制,支持多种身份认证方式(如 OAuth、本地账号密码、API Key 等)。通过封装一层适配 Egg.js 的中间件和上下文扩展,简化在 Egg 应用中集成认证功能的流程。

  2. 认证流程

    • 通过 app.passport.use() 注册认证策略(如 GitHub、Twitter 等)。

    • 调用 app.passport.authenticate() 或 app.passport.mount() 挂载认证路由,处理登录请求。

    • 认证成功后,通过 verify 钩子验证用户信息,并通过 serializeUser 和 deserializeUser 实现用户信息在会话(Session)中的序列化与反序列化。

  3. 会话管理
    依赖 Egg.js 的 Session 中间件(需在配置中启用),将认证用户认证状态存储在会话中,通过 passport-session 中间中间件实现状态维持。

是否依赖数据库?

egg-passport 本身不直接依赖数据库,但实际使用中通常需要结合数据库:

  • 用户信息存储:认证成功后,需通过 app.passport.verify 钩子验证用户合法性(如从数据库查询用户),或创建新用户。例如在示例代码中:

    // 从数据库查询或创建用户
    const auth = await ctx.model.Authorization.findOne({ ... });
    const newUser = await ctx.service.user.register(user);
    

    这里的 ctx.model 和 ctx.service.user 通常对应数据库操作。

  • 无数据库场景:若仅需临时认证(如测试或简单场景),可在 verify 钩子中直接返回用户对象,无需数据库。

 

egg-passport 核心是认证流程的调度,不强制依赖数据库,但实际业务中需结合数据库完成用户管理。

 

Link:https://www.cnblogs.com/farwish/p/19164023

posted on 2025-11-09 17:11  ercom  阅读(0)  评论(0)    收藏  举报