titbit-token
v2.1.3
Published
the extension of titbit for user login with token
Downloads
54
Maintainers
Readme
titbit-token
用于进行token会话验证的处理。通过make生成token,verify验证token是否有效。
安装
npm i titbit-token
如何使用:
const titbit = require('titbit')
const titok = require('titbit-token')
let tk = new titok({
//验证失败时,返回的状态码,默认是403
failedCode: 400
})
const app = new titbit({
debug: true
})
app.addService('token', tk)
//必须是32位密码
tk.setKey('1234567890abcdefghijklmnopqrstuv')
app.addService('tok', tk)
app.use(tk, {group: 'token'})
app.post('/login', async c => {
//进行登录验证
//...
let userinfo = {
//....
}
let token = c.service.token.make(userinfo)
//最后返回登录成功后的token
c.send(token)
})
//其他路由都属于需要验证的token分组。
app.get('/user', async c => {
//...
}, {group: 'token'})
app.run(1234)
这个示例是放在一个程序文件中的完整使用过程。你应该把验证过程放在独立的中间件模块中,让其自动进行token验证。
初始化以及token的生成和验证
const titok = require('titbit-token')
let tok = new titok({
//表示有效期的秒数
expires: 3600,
//加解密的密钥,长度32。
key : 'qazxswedcfvrgthynujmkiolpr5tf765',
//初始向量值,用于和最开始的数据块进行运算,长度16。
iv : 'qawsedrftgyhujie',
})
let data = {
id : '1001',
name : 'world'
}
let tokenstr = tok.make(data)
let dedata = tok.verify(tokenstr)
console.log(tokenstr, dedata)
make一定要对键值对形式的数据进行处理并使用JSON.stringify进行序列化,不能传递其他类型的数据。
verify的返回值是一个对象,属性ok表示是否成功,如果ok为false,则errcode是一个单词描述的状态码信息,并且是大写的。
如果ok为true,则data是解密后的数据,同时存在now属性是获取的当前时间戳,后续处理不必再次调用Date.now()获取。主要目的是用于根据时间判断是否自动更新token的情况。
添加自定义的ID以及Key、IV
make支持第二个参数是token id。使用token id可以进行比较精确的控制,多个应用签发的token可以有不同的token id。要启用此功能,则需要先调用addTokenId添加要识别的应用Id。
要让不同的id具有不同的key和iv,则可以使用setIdKeyIv。
const titok = require('titbit-token')
let tok = new titok()
//支持参数是stirng或array,最终都是转换成array,然后循环添加。
tok.addTokenId(['test', 'app1', 'app2'])
//参数:id、key、iv
//一旦设置了此值,make生成token的时候,如果
tok.setIdKeyIv('app1', 'qazxswedcfvrgthynujmkiolp0987654', 'qawsedrftgyhujik')
自定key、iv、id作为参数
const titok = require('titbit-token')
let tok = new titok()
let ikv = {
key : 'qazxswedcfvrgthynujmkiolp0987654',
iv : 'qawsedrftgyhujik',
id : 'app1'
}
let data = {
id : '1001',
name : 'unixx'
}
let token = tok.makeikv(data, ikv)
let dedata = tok.verifyikv(token, ikv)
console.log(token, dedata)
随机生成iv并生成token
const titok = require('titbit-token')
let tok = new titok()
let data = {
id : '1001',
name : 'unixx'
}
let t = tok.randIvToken(data)
//返回值t包括token、iv、id、key。
let dedata = tok.verifyikv(t.token, t)
console.log( t, dedata )
生成和验证带标签和IV的token
生成带标签和iv的access_token
//返回值: 'titbit-token [IV].[TOKEN]'
TitbitToken.prototype.makeAccessToken(info, id=null, key=null)
验证
//返回值和verify一致
TitbitToken.prototype.verifyAccessToken(info)