koa用户认证抽象层中间件
前言
koa-userauth
用户认证抽象层中间件,主要用于在某些场景下,某些资源是必须授权(一般是登录)通过之后才能够访问的,当未登录去访问需要的资源时,由于该资源是需要授权才能够访问到的(可选择从session中获取),因此将自动重定向到,再重定向到原本目标资源的访问
如何使用
1 | const koa = require('koa'); |
koa-userauth
是基于koa
或者koa-generic-session
的基础上来工作的,通过对外暴露的userauth({配置})
方法,来配置并创建对应的一中间件,初步猜测应该是通过匹配每一次客户端请求的资源的路径ctx.request.path
来进行对应的动作分配的!这边将在后续的源码分析中具体剖析一波!
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
match | String|Regex|Function|null | null | null |
ignore | String|Regex|Function| | null | null |
loginURLFormatter | Function | null | (url, rootPath, ctx) => {} ,设置格式化的登录url,也就是需要重定向到的登录页面链接地址 |
rootPath | String | ‘/‘ | 默认的appurl的跟路径 |
loginPath | String | ‘/login’ | 登录的路径 |
loginCallbackPath | String | loginPath + ‘/callback’ | 登录成功后的回调路径地址 |
logoutPath | String | ‘/logout’ | 退出登录的路径 |
userField | String | ‘user’ | 登录成功后,将会在this.session 上使用的登录用户字段名,也就是可以通过this.session.user 来访问到对应的登录用户信息 |
getUser | Function | null | ctx => {} ,获取用户函数,使用从req 中获取用户信息 |
loginCallback | Function | null | (ctx, user) => {} ,用户登录处理逻辑回调,一般是登录成功了,需要那登录后的用户信息来做其他的操作,而且这里返回的redirectUrl ,将控制着是否要在登录成功后,飞到其他的地方,返回[user, redirectUrl] |
loginCheck | Function | null | ctx => {} ,返回true则表示已登录,默认值为true |
getRedirectTarget | Function | null | ctx => {} ,自定义在登录之后如何重定向到目标链接 |
logoutCallback | Function | null | (ctx, user) => {} ,用户退出登录的逻辑回调,当用户触发推出登录操作时候,将自动触发该方法,该方法可通过返回一字符串,改变原本的退出登录重定向链接地址 |
源码分析
koa-userauth
这么多的配置参数,那么它是如何结合这些参数来进行工作的呢?
一切从调用的方法入口开始:
1 | const defaultOptions = { |
登录中间件loginHandler
🌠 关于这个loginHandler(ctx)
登录中间件的定义如下:
1 | function login(options){ |
⭐ 也就是说,在执行到这个loginHandler
中间件的时候,将自动拼装好即将要登录的loginURL,进行对应的跳转,这里没有使用next()
,意味着一旦执行到这个中间件的时候,就直接飞往另外的一个地址了!!!
登录回调中间件loginCallback
🌠 一般情况下,我们在用户登录成功后,允许对用户进行一个干预操作,比如说要追加或者记录等操作!因此可以根据这个loginCallback
来进行回调处理
1 | function loginCallback(options){ |
访问退出登录中间件loginHandler
1 | function logout(options){ |
学到什么
🌠 在自定义中间件的时候,可以将自身的不同业务场景下的中间件,根据自身封装的逻辑分支,拆分为不同的中间件来返回,满足于不同场景下的自定义业务,还可以通过将逻辑通过options
参数化的形式来进行对外暴露!!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 online阳光-专注于大前端行业领域!