2016-03-05 69 views
2

我一直在做很多研究,但都沒有幫助我理解UserClaim表的意義。瞭解MVC5 UserClaim表

當您創建一個MVC5項目時,會在註冊數據庫時創建一些默認表。我理解除UserClaim之外的所有人的目的。

從我的理解,用戶聲明基本上是關於用戶的關鍵對值。例如,如果我想要一個FavouriteBook字段,我可以將該字段添加到用戶表並訪問它。其實我已經有類似的東西建立在我的每一個用戶都有「自定義URL」於是,我已經創造了以下的申索:

public class User : IdentityUser 
{ 
    public string CustomUrl { get; set; } 

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     userIdentity.AddClaim(new Claim("CustomUrl", CustomUrl)); 
     return userIdentity; 
    } 
} 

public static class UsersCustomUrl 
{ 
    public static string GetCustomUrl(this IIdentity identity) 
    { 
     var claim = ((ClaimsIdentity)identity).FindFirst("CustomUrl"); 
     return (claim != null) ? claim.Value : string.Empty; 
    } 
} 

以上基本上可以讓我通過簡單地調用User.Identity.GetCustomUrl()訪問CustomUrl

上述代碼不會寫入UserClaims表,因爲用戶表中存在該值。那麼這張桌子有什麼意義呢?

我在猜測,也許我應該將CustomUrl添加到UserClaims,並以某種方式將其綁定到身份,這可能是什麼?我很想知道答案!

回答

3

在您呈現用戶可以在您的網站上註冊/登錄的多種方式的情況下,聲明非常有用......特別是,我正在談論與Google,Facebook和其他組織進行的第三方身份驗證推特。

在用戶通過他們選擇的第三方對自己進行身份驗證之後,該第三方將向您披露一組索賠,這是一組以可識別用戶身份的方式描述用戶的信息。

索賠將包含哪些信息因提供者而異。例如,谷歌將分享用戶的電子郵件地址,他們的名字,他們的姓氏,但將其與Twitter進行比較... Twitter不共享任何這些信息,您將收到他們的Twitter帳戶的標識符以及他們的訪問令牌。

基於聲明的身份驗證提供了一種簡單的方法來促進所有這些信息,而替代方案可能意味着在您的數據庫中爲與您一起工作的每個提供程序創建表。

+0

現在有很多意義,謝謝你澄清它。 – Bojan

+0

最受歡迎:) –