我正在与JWT斗争,尤其是没有令牌的注册用户。我的意思是,第一个客户端与服务器的联系,我有用户的ID和密码,我想将它们发送到服务器并获取令牌。
客户方:
let token = null
let query = token ? { query: `auth_token=${token}` } : { query: `id=${id} }
const socket = io.connect(endpoint, query)
和服务器端:
io.use(jwtAuth.authenticate(
{ secret, algorithm, succeedWithoutToken },
(payload, done) => {
if (payload.sub) {
let sub = payload.sub
return done(null, true)
}
else {
let id = payload.id
let token = jwt.sign({ sub: id }, secret)
console.log('payload', payload)
console.log('id', id)
console.log('token', token)
return done('no token specified', null, token)
}
})
)
当然,令牌是null
,我们没有payload.sub
,所以它执行else语句,但有效载荷是空对象,id是undefined
。
我现在明白id不能像那样实现,因为jwt payload
是一个空对象,所以我的问题是:我怎样才能以其他方式传递id?
这是草案,首次尝试实施,但我无法理解如何实现......
在我尝试实现jwt之前,我通过查询传递了id,我可以从client.handshake.query.id
任何想法或想法? 提前谢谢!