介绍asp点网核心身份
 

介绍了ASP.网络核心身份

ASP.NET过去曾提供管道代码来帮助识别和管理应用程序的用户. 您可以选择许多选项来管理应用程序的用户,包括活动目录, 外部身份提供者, 或者将用户帐户存储在应用程序数据库中(这通常涉及使用实体框架和SQL Server管理数据存储). 在这篇文章中,我们将看看如何利用ASP在应用程序数据库中存储用户帐户.网络核心身份. 这个选项将让我们利用微软的助手方法来管理用户帐户,包括处理登录, 注销, 密码重置, 用户注册, 等.

项目设置

在Visual Studio 2017中,选择新项目并选择ASP.网络核心 Web应用程序.

接下来选择Web应用程序. 注意默认的“身份验证”为“无身份验证”. 单击Change Authentication按钮,这样我们就可以选择一个. 

你有很多选择,但要利用ASP.网络核心身份, 选择个人用户帐户和商店用户帐户在应用程序选项, 然后再次单击“确定”和“确定”. Visual Studio将根据您所选择的模板选项创建项目. 

展开Areas文件夹,你会看到它下面的身份文件夹和Pages文件夹. 注意,创建的唯一物理文件是_ViewStart.cshtml,用于定制标识页面的外观. 您可能想知道提供用户管理功能的控制器和视图在哪里. 这个功能已经被放到一个以NuGet包形式提供的Razor类库中 微软.AspNetCore.身份.UI.

如果您需要自定义用户管理页面而不是自定义布局, 您可以通过脚手架添加页面来创建页面. 在Visual Studio, 右键单击web应用程序项目, 选择添加, 新的支架项…, 选择身份, 然后单击Add. 

您将看到另一个窗口,它允许您设置身份选项,包括指定自定义布局页面, 选择要创建的用户管理页面, 以及选择实体框架数据上下文. 单击Override所有文件复选框,并选择默认的Data上下文,然后单击Add. 

Visual Studio将为您构建所有标识文件,并添加一个自述文件,告诉您如何实现它们. 

即使自述文件表明您需要进行这些更改, 脚手架为你制造它们. 

身份有许多配置选项,可以根据您希望如何管理用户来设置密码和锁定需求. 您可以选择使用默认值或在Startup中指定选项.cs.

现在,您应该看到项目中在Areas/身份下创建的所有标识页面. 需要注意的一点是,Identify文件被创建为 剃须刀页面 即使您选择Web应用程序(模型-视图-控制器)项目模板时创建项目. 这似乎是微软方面的一个漏洞或疏忽, 但事实证明,它是微软从MVC转向剃须刀页面的一部分. 他们没有计划添加一个选项来将身份页面构建为MVC. 在我看来, 这是一个错误,因为我仍然在使用MVC, 我不想在我的应用程序中混合使用MVC和Razor页面, 我不想花时间去学习剃刀页面. 我确实花了一些时间,看看我是否可以将剃须刀页面转换为MVC,但在浪费了几个小时之后, 我放弃了,并勉强接受了这个事实,我的申请中的身份部分将必须是剃须刀页面.

如果编译并运行应用程序, 您应该能够看到带有注册和登录链接的默认页面.

点击注册链接可以创建一个新帐户.

单击“登录页面”可以登录.

如你所见, 您可以从身份中获得许多开箱即用的功能,而只需要很少的配置.

定制的身份

在这一点上, 如果您需要比默认情况下提供的更多, 您可以开始自定义身份页面和模式. 我发现默认模式缺少一些我想知道的博悦注册登录我的用户的东西, 比如他们注册的时间和最后一次登录的时间. 为了添加和使用这些属性,您必须覆盖身份User. 第一步是辨别 .NET是通过一个新类PortalUser来实现的. 在启动.Cs添加以下代码. 

服务.AddDefault身份()
                .AddRoles<身份Role>()
                .AddEntityFrameworkStores();

我所做的就是告诉别人 .我的自定义类PortalUser将用于身份,而不是内置的身份User.  注意,我还必须包括AddRoles,以便身份知道使用哪些角色,以及AddEntityFrameworkStores,以便它知道使用哪些DbContext.  顺序在这里很重要, AddRoles必须出现在AddEntityFrameworkStores之前.  这一点绝对把我绊倒了,你可以从我的 StackOverflow 从它的浏览量来看,很多人都遇到了同样的问题.

接下来,修改ApplicationDbContext.cs使用PortalUser. 

 public partial class ApplicationDbContext : 身份DbContext
    {
        public ApplicationDbContext(DbContextOptions options) : base(options)
        {

        }
    }
然后使用希望与用户关联的属性创建新的PortalUser类,并覆盖身份User
    公共类PortalUser: 身份User
    {
        (PersonalData)
        公共DateTime? LastLoginDateUtc { get; set; }

        (PersonalData)
        公共DateTime? RegistrationDateUtc { get; set; }
    }

然后使用希望与用户关联的属性创建新的PortalUser类,并覆盖身份User 

 公共类PortalUser: 身份User
    {
        (PersonalData)
        公共DateTime? LastLoginDateUtc { get; set; }

        (PersonalData)
        公共DateTime? RegistrationDateUtc { get; set; }
    }

接下来,您需要首先使用实体框架代码构建这些更改.

add-migration -Context ApplicationDbContext标识

然后将这些更改保存到数据库中.

- database就上下文ApplicationDbContext

最后,您应该在SQL Server的用户表中看到这些列.

才能开始使用这些属性, 我们需要对处理用户登录和注册的剃须刀页面进行修改.  找到后面的登录页面代码(登录.cshtml.c)并编辑它.  为了节省最后的登录时间,我们必须做的是设置获得用户帐户, 将LastLoginDateUtc设置为当前日期和时间, 然后更新用户帐户.  注意,这都是使用内置的身份完成的 UserManager 它允许我们将更改保存到 UserStore 我们已经配置为我们的SQL Server数据库.

public async Task OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.内容(“~ /”);

            如果(状态.是否是可用)
            {
                //尝试用户登录
                var result = await _signInManager . var result = await _signInManager.PasswordSignInAsync(输入.电子邮件,输入.密码,输入.RememberMe lockoutOnFailure:真正的);
                如果结果.成功)
                {
                    //获取用户帐户   
                    var 用户 = await _用户Manager . var 用户 = await _用户Manager.FindByNameAsync(输入.电子邮件);
                    如果(用户 != null)
                    {
                        //保存上次登录时间
                        用户.LastLoginDateUtc = DateTime.UtcNow;
                        var resultSave = await _用户Manager . var resultSave = await _用户Manager . var.UpdateAsync(用户);
                        if (!resultSave.成功)
                        {
                            / /记录错误

结论

ASP.网络核心身份提供了很多管理用户的功能,而只需要很少的配置. 将身份 UI作为库提供,使其非常容易启动和运行. 在构建身份页面并对其进行扩展以满足应用程序的需求时,它还具有很大的灵活性. 但正如他们所说,能力越大,责任越大! 本文只是简单介绍了一下身份可以做些什么,所以请确保您对ASP有充分的了解.网络核心安全性,然后在应用程序中实现它. 我建议你看看下面博悦注册登录微软文档的一些很棒的文章.

进一步的阅读

ASP的概述.网络核心安全
ASP中身份识别的介绍.网络核心
ASP中的脚手架标识.网络核心项目
在ASP中添加、下载和删除自定义用户数据到身份.网络核心项目
ASP中的身份模型定制.网络核心
配置ASP.网络核心身份

我们正在招聘开发人员!

来和我们获奖的团队一起工作吧! 我们正在寻找完整的堆栈, 在汉普顿路和里士满弗吉尼亚州的职位中到高级开发人员. 查看我们的招聘页面,了解当前的职位空缺,今天就把你的简历发给我们!

约翰Hadzima
约翰Hadzima核心因素

约翰Hadzima是博悦注册登录的解决方案架构师和团队领导,也是微软认证的解决方案开发人员. 他在Hampton Roads做了20多年的开发人员,从事各种语言和数据库的开发工作,偶尔也会开发手机应用. 约翰喜欢冲浪、骑公路自行车、打高尔夫球,他的两个儿子使他忙得不可开交.

让我们来谈谈你的项目.

我们是一家提供全方位IT和数字营销服务的公司. 我们相信,成功的项目是与我们的客户合作和透明的结果. 您是否正在为您的网站或应用程序寻找更好的用户体验? 需要有经验的数据库架构师或业务分析师? 让我们谈谈!

X