passport.js 本地策略 与 express app 集成步骤

web app 用户认证功能模块,是一个高级用户交互功能模块,也是很基础的功能模块。因为大部分web应用 有用户特定的私密的交互会话。

用户认证功能 ,从名字就可推知,它是在用户数据模块基础之上的应用。

本文记录了使用 passport.js 作为 开发用户身份认证功能模块任务 的工具,省下了一功夫,也将 用户认证功能模块 的处理逻辑 标准化。也为日后使用其他认证方式提供了扩展(例如 使用微信,微博等社区授权登录)。

PS:初次使用 passport.js 时也不是特别顺畅 ,passport.js居然对登录表单字段(例如password字段名不对,会莫名无效)不进行严格错误处理。

集成概略

完整的用户认证功能包括两步:

第一,用户登录认证(登录页,用户数据,登出处理)

第二,私密 页的 认证检查( 对受保护的页面的路由请求进行权限检查)

集成步骤

passport.js 与 express app 集成(实现用户认证功能的)步骤:

  • 0 安装(主体,和本地策略)
 $ npm install passport passport-local
  • 1 配置 (本地策略的配置过程需要访问用户数据,故配置模块「依赖数据库」)

    • 1 1 配置认证过程(例如本地策略)| passport.use() L 认证假定提交的form已经在 环境(body-parser处理过),并且有默 认名字(可配置):user and password
    • 1 2 配置 认证凭据(credential)的序列化(serialize) L 认证凭据一般是会话数据user对象(req.user),会话跳转前后,这个 认证凭据 需要自动保存和恢复 L 这部分的逻辑,也依赖数据库
  • 2 与 express app 集成 将 passport.initialize()返回的中间件安装进 express L 一般还要安装 passport.session();

  • 3 开发用户登录页(也包括登出)| 登录/登出页是 用户认证模块的有机组成 在user.signin的post 路由处理上触发 认证 export const signin = passport.authenticate("local", {}); L authenticate 这个API触发配置好的认证处理

  • 4 对 私页面 进行保护 使用 connect-ensure-login

     router.get('/secretpage', ensuerLogins.ensureLoggedIn('/users/signin'), function(req, res) {}

具体代码参考这里

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.