未创建ASP.NET Identity 3.0身份验证cookie

时间:2017-09-19 15:04:15

标签: entity-framework asp.net-core-2.0 asp.net-identity-3

我正在尝试将ASP.NET Identity 3.0单用户身份验证添加到 Visual Studio 2017中的“ASP.NET核心应用程序角度模板”。我在这里创建了一个GitHub存储库:

https://github.com/DapperDanH/NutmegStackoverflow

这个项目真的没什么了。从高层次来看,这就是我所做的:

  1. 使用.NET Core和ASP.NET Core 2.0创建了一个新的“ASP.NET核心Web应用程序”,并在Visual Studio中选择了Angular模板。
  2. 我从现有数据库中添加了ASP.Identity,EF Core和scaffold代码的第一个文件。
  3. 我使用“个人用户帐户”示例项目,使用Web应用程序模板从“ASP.NET核心Web应用程序”复制并粘贴了许多控制器和视图。
  4. 我修改了Startup.cs(添加了service.AddIdentity和app.UseAuthentication()等)
  5. 我的目标是使用标准的ASP.NET MVC作为身份验证部分。

    一切似乎都有效。 Web应用程序启动并显示主页。我创建了“注册”和“登录”页面的链接。我可以成功注册新用户,并将新用户添加到数据库中。用户可以在“登录”页面中输入他们的信息,AccountController.Login方法将成功返回到PasswordSignInAsync方法:

                    var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
    

    问题是,没有创建身份验证cookie。好吧,大约99%的时间没有创建cookie但是偶尔会创建一个。

    我的直觉说这个问题可能出现在Startup.cs中。这是我正在使用的代码:

    // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<NutmegContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
            services.AddIdentity<User, AppRole>()
                .AddEntityFrameworkStores<NutmegContext>()
                .AddDefaultTokenProviders();
            // Add application services.
            services.AddTransient<IEmailSender, EmailSender>();
    
            services.AddMvc();
        }
    
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
                {
                    HotModuleReplacement = true
                });
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
    
            app.UseStaticFiles();
            app.UseAuthentication();
    
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
    
                routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller = "Home", action = "Index" });
            });
        }
    

    我真的希望有人可以帮助我。要看到这一点:

    1. 在此处下载项目:https://github.com/DapperDanH/NutmegStackoverflow
    2. 在Package Manager控制台中运行Update-Database,确保Default Project为Nutmeg.Data。
    3. 运行应用程序,确保Nutmeg.Web是启动项目。
    4. 单击“注册”按钮并注册新用户。检查数据库并注意添加了用户。
    5. 点击登录。输入步骤4中使用的相同信息。是否创建了cookie?
    6. 希望有人可以帮助我。感谢您阅读这篇长篇文章!

      谢谢, 丹

1 个答案:

答案 0 :(得分:0)

我能够让应用程序始终如一地创建auth cookie,但将我的web项目切换为HTTPS。我不知道为什么这很重要,但它似乎解决了它。有谁能解释?