其他分享
首页 > 其他分享> > CodeGo.net>了解MVC5 UserClaim表

CodeGo.net>了解MVC5 UserClaim表

作者:互联网

我一直在进行大量研究,但没有一项研究能帮助我了解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()来访问CustomUrl

上面的代码不会写入UserClaims表,因为该值存在于Users表中.那么,这张表的重点是什么?

我正在猜测也许应该将CustomUrl添加到UserClaims并以某种方式将其绑定到身份,这可能是为了什么?我很想知道答案!

解决方法:

如果您提出了多种用户可以在您的网站上注册/登录的方式,那么声明非常有用……特别是,我在谈论与Google,Facebook和Twitter等组织进行的第三方身份验证.

用户通过其选择的第三方对自己进行身份验证后,该第三方将向您披露一组权利要求,即一组以您可以识别他们的方式描述该用户的信息.

声明所包含的信息因提供商而异.例如,Google将共享用户的电子邮件地址,他们的名字,姓氏,但将其与Twitter进行比较… Twitter不共享任何电子邮件地址,您将获得其Twitter帐户的标识符以及访问令牌.

基于声明的身份验证提供了一种方便的方法来简化所有这些信息,而替代方法很可能意味着在数据库中为您使用的每个提供程序创建表.

标签:asp-net-mvc-5,asp-net-identity,c,asp-net-mvc,entity-framework
来源: https://codeday.me/bug/20191119/2032318.html