長話短說,我使用身份和在我的解決方案中,我創建了一個自定義帳戶設置頁面,工作正常和花花公子。問題是我在_Layout.cshtml
中有用戶FirstName
和LastName
。ASP.NET身份不是「保存」更新索賠
public static MvcHtmlString GetUsersFirstAndLastName(this HtmlHelper helper)
{
string fullName = HttpContext.Current?.User?.Identity?.Name ?? string.Empty;
var userIdentity = (ClaimsPrincipal)Thread.CurrentPrincipal;
var nameClaim = identity?.FindFirst("fullname");
if (nameClaim != null)
{
fullName = nameClaim.Value;
}
return MvcHtmlString.Create(fullName);
}
這種方法的偉大工程,直到用戶去他們的個人資料,並更新他們的名字:這個名字是由一個自定義的輔助方法,我有設置。如果他們改變他們的名字從George
到Bob
然後當他們四處在我的網站這個方法還是去拉他們作爲George
的名字,直到他們註銷並重新登錄。
所以我做了什麼來解決這個問題是,當他們更新自己的在帳戶設置的名字,我添加了一些代碼,以消除他們的老fullName
要求,並添加新的,就像這樣:
var identity = User.Identity as ClaimsIdentity;
// check for existing claim and remove it
var currentClaim = identity.FindFirst("fullName");
if (currentClaim != null)
identity.RemoveClaim(existingClaim);
// add new claim
var fullName = user.FirstName + " " + user.LastName;
identity.AddClaim(new Claim("fullName", fullName));
隨着這段代碼的_Layout
視圖現在更新名稱(在我們前面的例子George
現在將更改爲Bob
)。 然而,,一旦點擊了該視圖到網站上的另一個地方或者當他們刷新頁面時,它就會立即更改爲George
。
身份仍然有點新我有點困惑,爲什麼這個新的更新聲明不適用後,他們點擊不同的頁面或刷新。任何幫助表示讚賞。 :)
你可以重新發出餅乾 – tmg