2 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
據(jù)我所知,您沒有保存任何會話數(shù)據(jù)或在任何地方存儲令牌 - 這很棒。您只需在對 API 的請求中將令牌追加到標(biāo)頭即可。
因此,您唯一能做的就是可能使 中的令牌過期,然后確保刪除客戶端上的令牌 - 可能是本地存儲,會話存儲等 - 您的客戶端代碼需要終止令牌,因此無法再次包含它。/logout route
附注:
您不會在任何地方延長令牌生存期,因此即使用戶繼續(xù)在網(wǎng)站上進(jìn)行交互,令牌過期也不會更新。您需要手動刷新令牌/生成新令牌才能使令牌出現(xiàn)滑動過期。
我建議您將令牌保存在餅干中。將 Cookie 設(shè)置為“唯一”、“安全”,然后指定域。這要安全得多,并且還允許您從API中使cookie過期。如果您包含的任何腳本遭到入侵,它們可以輕松訪問所有用戶的令牌。
例:
import {serialize} from 'cookie';
import jsend from 'jsend';
...
const token = jwt.sign(
{
id: validationResult.value.id // whatever you want to add to the token, here it is the id of a user
},
privateKeyBuffer,
{
expiresIn: process.env.token_ttl,
algorithm: 'RS256'
});
const cookieOptions = {
httpOnly: true,
path: '/',
maxAge: process.env.token_ttl,
expires: new Date(Date.now() + process.env.token_ttl),
sameSite: process.env.cookie_samesite, // strict
domain: process.env.cookie_domain, // your domain
secure: process.env.cookie_secure // true
};
const tokenCookie = await serialize('token', token, cookieOptions);
res.setHeader('Set-Cookie', [tokenCookie]);
res.setHeader('Content-Type', 'application/json');
res.status(200).json(jsend.success(true));
然后在注銷中:
// grab from req.cookies.token and validate
const token = await extractToken(req);
// you can take action if it's invalid, but not really important
if(!token) {
...
}
// this is how we expire it - the options here must match the options you created with!
const cookieOptions = {
httpOnly: true,
path: '/',
maxAge: 0,
expires: 0,
sameSite: process.env.cookie_samesite, // strict
domain: process.env.cookie_domain, // your domain
secure: process.env.cookie_secure // true
};
// set to empty
const tokenCookie = await serialize('token', '', cookieOptions);
res.setHeader('Set-Cookie', [tokenCookie]);
res.setHeader('Content-Type', 'application/json');
res.status(200).json(jsend.success(true));

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于您已經(jīng)使用了JWT,后端將始終檢查2件事1。正確的令牌 2.如果該特定時(shí)間已結(jié)束(您應(yīng)該處理此時(shí)間)
對于第二點(diǎn),如果用戶時(shí)間超過前端,則可以刪除令牌(如果已將令牌存儲在localtorage中)。
對于注銷,當(dāng)用戶單擊注銷時(shí),只需從本地存儲中刪除jwt并重定向到登錄或其他頁面
添加回答
舉報(bào)