Файл cookie проверки подлинности ASP.NET Identity 3.0 не создается

Я пытаюсь добавить однопользовательскую аутентификацию ASP.NET Identity 3.0 в "угловой шаблон приложения ASP.NET Core" в Visual Studio 2017. Я создал репозиторий GitHub здесь:

https://github.com/DapperDanH/NutmegStackru

Там действительно не так много для этого проекта. С высокого уровня, это то, что я сделал:

  1. Создал новое "ASP.NET Core Web Application" с.NET Core и ASP.NET Core 2.0 и выбрал шаблон Angular в Visual Studio.
  2. Я добавил файлы ASP.Identity, EF Core и scaffold с файлами из существующей базы данных.
  3. Я скопировал и вставил многие контроллеры и представления из "Базового веб-приложения ASP.NET" с шаблоном веб-приложения, используя пример проекта "Индивидуальная учетная запись пользователя".
  4. Я изменил Startup.cs (добавлены service.AddIdentity и app.UseAuthentication() и т. Д.)

Моя цель - использовать стандартный ASP.NET MVC для частей аутентификации.

Кажется, все работает. Веб-приложение запускается и показывает домашнюю страницу. Я создал ссылки на страницы "Регистрация" и "Вход". Я могу успешно зарегистрировать нового пользователя, и новый пользователь будет добавлен в базу данных. Пользователь может ввести свою информацию на странице входа в систему, а метод AccountController.Login возвращает успех в метод PasswordSignInAsync:

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

Проблема в том, что файл cookie для аутентификации не создается. Ну, примерно в 99% случаев печенье НЕ создается, но время от времени создается один.

Моя интуиция говорит, что проблема может быть в 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/NutmegStackru
  2. Запустите Update-Database в консоли диспетчера пакетов, чтобы убедиться, что проектом по умолчанию является Nutmeg.Data.
  3. Запустите приложение, убедившись, что Nutmeg.Web является проектом запуска.
  4. Нажмите на кнопку Регистрация и зарегистрируйте нового пользователя. Проверьте БД и обратите внимание, что пользователь добавлен.
  5. Нажмите на Логин. Введите ту же информацию, которая использовалась в шаге 4. Создан ли файл cookie?

Надеюсь, кто-то может мне помочь. Спасибо за чтение этого длинного поста!

Спасибо Дэн

1 ответ

Мне удалось получить приложение для последовательного создания файла cookie авторизации, но я переключил свой веб-проект на HTTPS. Я понятия не имею, почему это имеет значение, но, похоже, это все исправляет. кто-нибудь способен объяснить?

Другие вопросы по тегам