3 回答

TA貢獻1877條經驗 獲得超6個贊
正確的答案是使用UserManager.IsInRoleAsync(identityUser, role)(docs)而不是ClaimsPrincipal.IsInRole(role)(這是 Razor 視圖中的 `User.IsInRole(role) 視圖和 aSignalR 集線器中的 Context.User.IsInRole(role) )。
IdentityUser可以從ClaimsPrincipalvia UserManager.GetUserAsync(user)( docs ) 獲得。
所以,完整的代碼應該是這樣的。在剃刀中:
var user = await userManager.GetUserAsync(User);
if (user != null)
if(await userManager.IsInRoleAsync(user))
// ...
在 SignalR 集線器中:
var user = await userManager.GetUserAsync(Context.User);
if(user != null)
if(await userManager.IsInRoleAsync(user))
// ...
(不確定是否需要空檢查,但它們不會受到傷害)

TA貢獻1851條經驗 獲得超5個贊
我在使用 JWT 身份驗證的 Node.js 應用程序中經歷了類似的場景。在這種情況下,我設置了一個 HTTP 管道攔截器,如果某些用戶聲明發生更改,它將刷新 JWT 令牌。
考慮到這一點,我發現了另一個堆棧溢出帖子??雌饋砟阕龅暮臀疑厦孀龅囊粯?。您調整用戶主體的聲明并調用身份驗證管理器進行重新身份驗證。您應該能夠在用戶不知道他剛剛注銷/登錄的情況下完成所有這些操作。

TA貢獻2065條經驗 獲得超14個贊
不幸的是,用戶將需要注銷然后重新登錄以刷新他們的角色,因為它們被存儲為聲明。在您更新了他們的角色后,您可以使他們的登錄無效,這將迫使他們再次登錄:
如何在 ASP.NET Core Identity 中注銷其他用戶
- 3 回答
- 0 關注
- 238 瀏覽
添加回答
舉報