使用JWT管理多个设备节点js的用户会话

时间:2016-08-22 11:37:26

标签: node.js session jwt

我正在制作一个应用程序,我在其中使用JWT来维护会话。当任何新用户注册时,我向用户提供JWT令牌并将其存储在我的数据库和用户浏览器中。当用户注销时,我从浏览器和我的数据库中删除该令牌。

但我希望如果用户从多个设备登录,那么它将从一个设备注销,它也不会从其他设备注销。我该如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

首先,JWT不应该能够退出"但是要自动过期,这就是你应该设置短expiresIn次的原因。 这是因为使用JWT,会话由客户端处理,注销用户不是服务器的责任,只是丢弃JWT的用户。

在您的情况下,我想您在允许用户之前检查数据库中是否存在JWT,因此,您只需要搜索并删除与该帐户关联的其他JWT。
但是如果你想让事情变得干净,那么接受JWT逻辑:只需缩短生命周期,等待它们过期。

答案 1 :(得分:1)

只需在数据库中使用令牌数组即可。每个设备将在令牌数组中拥有自己的令牌(当用户首次从新设备登录时,每个令牌都已添加到db),并且当用户从该设备注销时,只会删除令牌数组中的关联令牌。这是一个用户模式的示例:

import SwiftUI

struct ContentView: View {

@State var showsAlert = false
@State var errorMsg = "xxxx"

var body: some View {
    Button(action: { self.showsAlert = true }) {
        Text("press to test").padding(10).border(Color.black)
    }.alert(isPresented: self.$showsAlert) {
        Alert(title: Text(self.errorMsg),
              message: Text("text message"),
              primaryButton: Alert.Button.default(Text("yes"), action: {
                print("---> yes")
              }),
              secondaryButton: Alert.Button.default(Text("no"), action: {
                print("---> no")
        }))
    }
}
}