koa2使用token做服务端验证时,如何失效该账号之前生成的 token 一般使用token做服务端验证时,登录一个账号会生成一个token,使用其他环境再次登录该账号可以生成另一个token,为了保证唯一,如何做到只生效一个token而却失效另外一个token。
session.ts import { MD5 } from './utils'; let token_map_session = {}; let session_map_token = {}; export const createSession = (token: string) => { const session = MD5(token + Date.now()); const old_session = token_map_session[token] delete session_map_token[old_session] token_map_session[token] = session; session_map_token[session] = token return session; } export const getSession = (token: string) => token_map_session[token] export const getToken = (session_id: string | string[]) => { const id = [].concat(session_id).find(id => !!session_map_token[id]) return session_map_token[id] } user.ts // 伪代码 import { createSession, getSession, getToken } from './Session' export const login = async (req, resp) => { const { username, password } = req.body; const u = await sql.find(username, password); if (u) { resp.setHeader('Set-Cookie', 'token=' + createSession(username + '&&' + password) ) } } export const isLogin = async (req, resp) => { const cookie = getCookie(req); const token = getToken(cookie.token); const [username, password] = token.split('&&'); const u = await sql.find(username, password); if (u) { // login ok } else { // redirect to login.html } }
不知道楼主具体用的是什么『token』。通常来说,token有关联的过期时间,重新登录、生成新token时,只要顺带把旧的token的有效时间设置为过期,或直接删除 就可以。 比如 koa-session 里的destroy操作。
session.ts
user.ts