Я пытаюсь выполнить автоматический вход в целях отладки в приложении ASP.net core 2.1, которое я создал.
Получение ошибки:
HttpContext не должен быть нулевым.
Код ниже находится в файле Startup.cs
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider ServiceProvider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
app.UseCookiePolicy();
CreateRoles(ServiceProvider).Wait();
if (env.IsDevelopment())
{
DeveloperLogin(ServiceProvider).Wait();
}
}
private async Task DeveloperLogin(IServiceProvider serviceProvider){
var UserManager = serviceProvider.GetRequiredService<UserManager<User>>();
var signInManager = serviceProvider.GetRequiredService<SignInManager<User>>();
var _user = await UserManager.FindByNameAsync("[email protected]");
await signInManager.SignInAsync(_user, isPersistent: false);
}
Это своего рода расширение для другого вопроса, который я недавно задал об аутентификации Windows на Mac. Из-за характера приложения я добавил Core Identity для управления ролями, хотя приложение по-прежнему использует только проверку подлинности Windows.
Поскольку я перешел на Macbook для разработки, я пытаюсь выполнить автоматическую сборку для отладки с использованием уже существующего удостоверения, поскольку нет аутентификации Windows, в которую входит функция DeveloperLogin, но я получаю ошибку, упомянутую выше.
Трассировки стека:
System.AggregateException: "One or more errors occurred. (HttpContext must not be null.)"
---> System.Exception {System.InvalidOperationException}: "HttpContext must not be null."
at Microsoft.AspNetCore.Identity.SignInManager'1.get_Context()
at Microsoft.AspNetCore.Identity.SignInManager'1.SignInAsync(TUser user, AuthenticationProperties authenticationProperties, String authenticationMethod)
at myApp.Startup.DeveloperLogin(IServiceProvider serviceProvider) in /Users/user/Documents/Repositories/myApp/myApp/Startup.cs:135
Для HttpContext
он существует только во время http-конвейера запросов. HttpContext
в методе Configure
, вам нужно ссылаться на код во время промежуточного программного обеспечения.
Для использования Identity
вам нужно использовать app.UseAuthentication();
,
Выполните шаги ниже с подписью с Identity
.
Настройте конвейер запросов.
app.UseAuthentication();
if (env.IsDevelopment())
{
app.Use(async (context, next) =>
{
var user = context.User.Identity.Name;
DeveloperLogin(context).Wait();
await next.Invoke();
});
}
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Примечание: вам нужно вызвать app.UseAuthentication();
, заказ импортный.
DeveloperLogin
private async Task DeveloperLogin(HttpContext httpContext)
{
var UserManager = httpContext.RequestServices.GetRequiredService<UserManager<IdentityUser>>();
var signInManager = httpContext.RequestServices.GetRequiredService<SignInManager<IdentityUser>>();
var _user = await UserManager.FindByNameAsync("Tom");
await signInManager.SignInAsync(_user, isPersistent: false);
}