Файл cookie аутентификации ASP.NET Identity 3.0 не создается

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

https://github.com/DapperDanH/NutmegStackoverflow

На самом деле в этом проекте еще не так много. С высокого уровня, это то, что я сделал:

  1. Создал новое «веб-приложение ASP.NET Core» с .NET Core и ASP.NET Core 2.0 и выбрал шаблон Angular в Visual Studio.
  2. Я добавил первые файлы ASP.Identity, EF Core и шаблонного кода из существующей базы данных.
  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% случаев файл 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. Запустите Update-Database в консоли диспетчера пакетов, убедившись, что проектом по умолчанию является Nutmeg.Data.
  3. Запустите приложение, убедившись, что Nutmeg.Web является стартовым проектом.
  4. Нажмите кнопку «Регистрация» и зарегистрируйте нового пользователя. Проверьте БД и обратите внимание, что пользователь добавлен.
  5. Нажмите Войти. Введите ту же информацию, что и на шаге 4. Был ли создан файл cookie?

Надеясь, что кто-то может мне помочь. Спасибо, что прочитали этот длинный пост!

Спасибо, Дэн


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


Ответы (1)


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

person DapperDanh    schedule 13.11.2017