Я использую asp.net Core 2.0 с различными внешними аутентификациями (Google, Twitter и т. Д.).
Все работает, и я получаю подтвержденный ответ с событием OnTicketReceived, однако все последующие вызовыНа сайте не сохраняются данные пользователя.
Вот мой стартап:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<IdentityUser, IdentityRole>()
.AddDefaultTokenProviders();
services.AddAuthentication()
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["Google:ClientId"];
googleOptions.ClientSecret = Configuration["Google:ClientSecret"];
googleOptions.CallbackPath = "/auth/google";
googleOptions.SaveTokens = true;
googleOptions.Events = new OAuthEvents {OnTicketReceived = async e => await HandleOnTicketReceived(authService, e),};
})
.AddTwitter(twitterOptions =>
{
twitterOptions.ConsumerKey = Configuration["Twitter:ClientId"];
twitterOptions.ConsumerSecret = Configuration["Twitter:ClientSecret"];
twitterOptions.CallbackPath = "/auth/twitter";
twitterOptions.RetrieveUserDetails = true;
twitterOptions.SaveTokens = true;
twitterOptions.Events = new TwitterEvents {OnTicketReceived = async e => await HandleOnTicketReceived(authService, e),};
});
services.AddMvc();
}
Это все вроде бы отлично работает.Я получаю все необходимые данные от каждого провайдера OAuth.Вот пример: properties
private async Task HandleOnTicketReceived(IAuthService authService, TicketReceivedContext e)
{
var identity = e.Principal.Identity as ClaimsIdentity;
// HERE identity is correct for all external auth providers, so it is working this far
}
Проблема в том, что каждый последующий звонок на сайт теряет внешнюю личность пользователя.То, что было там, теперь исчезло.
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var identity = User.Identity as ClaimsIdentity;
// HERE is the problem -- on all subsequent calls, identity is basically empty
base.OnActionExecuting(filterContext);
}
Как мне сохранить личность пользователя при вызовах?Файл cookie "Identity.External" установлен и выглядит правильно.
Редактировать:
Я также добавил SQL-сервер с
services.AddDbContext<ApplicationDbContext>();
и
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
Пользовательские таблицы AspNet создаются, но никогда не заполняются.Я в растерянности за то, что здесь не хватает.
Я должен уточнить, что я использую dbContext.Database.Migrate () для создания таблиц аутентификации, поэтому я уверен, что ApplicationDbContext работает.Однако ошибки не выдаются, таблицы просто не заполняются, а последующие вызовы просто не получают идентификационные данные пользователя.