我正在使用超級令牌進行身份驗證。在更改另一個用戶的權限后,我撤銷了他的會話,這將導致他的角色在他當前的活動令牌運行它的生命周期限制后更新。這會導致其他用戶在此時注銷。我希望更新他的角色(即重新創建他的會話),但不要將他注銷并再次詢問他的憑據。那可能嗎?
uj5u.com熱心網友回復:
假設您使用的是 NodeJS SDK,我將回答這個問題。如果不是,則答案總體上仍然適用,但函式的名稱會改變。
你想要的都是可能的。我假設您在訪問令牌中具有很強的用戶角色,因此您應該使用updateAccessTokenPayloadSDK 中的函式,而不是撤銷其他用戶的會話:
import Session from "supertokens-node/recipe/session";
async function updateRoleOfOtherUser(userId: string) {
// we first get all the sessionHandles (string[]) for a user
let sessionHandles = await Session.getAllSessionHandlesForUser(userId);
// we update all the session's Access Token payloads for this user
sessionHandles.forEach(async (handle) => {
let currAccessTokenPayload = (await Session.getSessionInformation(handle)).accessTokenPayload;
await Session.updateAccessTokenPayload(handle,
{ role: "newRole", ...currAccessTokenPayload }
);
})
}
角色的更新將在其會話重繪 時生效,并且不會被注銷。
如果您希望更新立即生效,您可以在您身邊維護一個快取,標記所有需要提前重繪 的會話句柄。在成功驗證包含這些會話句柄的任何此類會話后,您可以向前端發送 401 強制會話重繪 并導致其角色更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460641.html
標籤:验证
下一篇:引數型別“StreamSubscription<User?>”不能分配給引數型別“Stream<String>?”
