dotnet core 2.1 版本的 Identity 对 Views 做了层封装,默认 Template 创建出来的项目只有一个视图文件了。如果想自定义修改,还需要先把视图文件都创建出来才行。
默认的文件结构:
使用 VS 添加 使用 VS 的话,还是很简单的,在项目上选择 Add
,里面有 New Scaffolded Item
选项。一步步点下去就好了。
使用命令行添加 命令行比较麻烦,需要先安装生成工具,再进行生成,而且需要指定很多参数。
dotnet tool install -g dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet restore dotnet aspnet-codegenerator identity -h dotnet aspnet-codegenerator identity -dc XXX.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout"
也要知道一下 AddDefaultIdentity
里封装的东西 public void ConfigureServices (IServiceCollection services ){ services.AddIdentity<IdentityUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1) .AddRazorPagesOptions(options => { options.AllowAreas = true ; options.Conventions.AuthorizeAreaFolder("Identity" , "/Account/Manage" ); options.Conventions.AuthorizeAreaPage("Identity" , "/Account/Logout" ); }); services.ConfigureApplicationCookie(options => { options.LoginPath = $"/Identity/Account/Login" ; options.LogoutPath = $"/Identity/Account/Logout" ; options.AccessDeniedPath = $"/Identity/Account/AccessDenied" ; }); services.AddSingleton<IEmailSender, EmailSender>(); }
可能遇到的问题
有可能遇到编译错误,找不到命名空间。 是 Class Name 有冲突导致的,找到报错的文件,补上自己的命名空间就可以了。
No IUserTwoFactorTokenProvider<TUser> named 'Default' is registered.
是缺少 TokenProvider
导致的,在 service.AddIdentity
最后加上 .AddDefaultTokenProviders()
就可以了。 里面还有很多可以配置的东西,可以参考:https://github.com/aspnet/Identity/issues/972
文档
更新详细的内容请参考(官方文档)offical doc