Press "Enter" to skip to content

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 配置 (本地策略的配置过程需要访问用户数据,故配置模块「依赖数据库」)
  配置认证过程(例如本地策略)| passport.use()
    L 认证假定提交的form已经在 环境(body-parser处理过),并且有默认名字(可配置):user and password
  配置 认证凭据(credantial)的序列化(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) {}

具体代码参考这里

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *