我一直在做很多研究,但没有一个能帮助我理解UserClaim Table的重点。
创建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()
上述代码不会写入UserClaims表,因为“用户表”中存在该值。那么这张桌子有什么意义呢?
我猜测也许我应该将CustomUrl添加到UserClaims并以某种方式将其绑定到身份,这可能是什么?我很想知道答案!
答案 0 :(得分:3)
如果您提供了多种用户可以在您的网站上注册/登录的方式,则声明非常有用...特别是,我在谈论与Google,Facebook和Twitter等组织的第三方身份验证。
用户通过他们选择的第三方对自己进行身份验证后,该第三方将向您公开一组声明,这是一组以您可以识别用户身份描述用户的信息。
声明包含哪些信息因提供商而异。例如,谷歌将分享用户的电子邮件地址,他们的名字,他们的姓氏,但将其与Twitter进行比较...... Twitter不会分享任何这些,你会收到他们的Twitter帐户的标识符以及他们的访问权限。< / p>
基于声明的身份验证提供了一种简单的方法来促进所有这些信息,而替代方案很可能意味着在您的数据库中为您使用的每个提供商创建表。