亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有什么方法可以立即顯示帳戶的新角色,而不是在此帳戶注銷和登錄后?

有什么方法可以立即顯示帳戶的新角色,而不是在此帳戶注銷和登錄后?

C#
米脂 2022-01-09 15:11:42
本教程在 docs.microsoft.com 上創建一個用戶數據受授權保護的 ASP.NET Core 應用教我們使用角色來處理授權。但是,關于角色,我注意到一件事:如果用戶在登錄時被添加到角色,則在他們注銷之前更改似乎不可見。那就是:如果我在此特定identityUser登錄時調用它:userManager.AddToRoleAsync(idenityUser, role)然后是教程中顯示的檢查當前用戶是否在角色中的操作:context.User.IsInRole(role)即使User引用這個特定的 ,也返回 FALSE identityUser。并且它一直返回 false ,直到用戶注銷并再次登錄。我實際上嘗試在教程中增強應用程序以添加提升功能,即允許管理員將普通用戶提升為經理。是的,被提升的用戶必須注銷并在他被提升后最終成為經理?,F在要求用戶在被提升時這樣做似乎是一種不必要的不便。但是對于像放下banhammer這樣的問題,這顯然是不可接受的。被禁止的用戶可能不會善意地立即注銷。有沒有辦法強制將用戶添加到角色立即生效,即使該用戶目前已登錄?
查看完整描述

3 回答

?
慕哥9229398

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))

        // ...

(不確定是否需要空檢查,但它們不會受到傷害)

此信息直接來自開發人員。


查看完整回答
反對 回復 2022-01-09
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

我在使用 JWT 身份驗證的 Node.js 應用程序中經歷了類似的場景。在這種情況下,我設置了一個 HTTP 管道攔截器,如果某些用戶聲明發生更改,它將刷新 JWT 令牌。

考慮到一點,我發現了另一個堆棧溢出帖子??雌饋砟阕龅暮臀疑厦孀龅囊粯?。您調整用戶主體的聲明并調用身份驗證管理器進行重新身份驗證。您應該能夠在用戶不知道他剛剛注銷/登錄的情況下完成所有這些操作。


查看完整回答
反對 回復 2022-01-09
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

不幸的是,用戶將需要注銷然后重新登錄以刷新他們的角色,因為它們被存儲為聲明。在您更新了他們的角色后,您可以使他們的登錄無效,這將迫使他們再次登錄:

如何在 ASP.NET Core Identity 中注銷其他用戶


查看完整回答
反對 回復 2022-01-09
  • 3 回答
  • 0 關注
  • 238 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號