2016-10-20 1 views
2

Я использую Identity в своем приложении ASP.NET, но работаю на двух веб-серверах на AWS и имею проблему, когда при входе в систему на одном сервере вы не регистрируетесь в другом, потому что они не имеют одного сеанса.Идентификатор ядра ASP.Net с распределенным сеансом

Это также проблема, например. когда я развертываю новую версию своего приложения - тогда пользователи будут выходить из системы и должны снова войти в систему.

Я попытался добавить распределенный кэш с Redis, в моем Configure метод:

app.UseSession(); 

И мой ConfigureServices:

services.AddDistributedRedisCache(options => 
{ 
    options.Configuration = "uri-to-redis-server"; 
    options.InstanceName = "name"; 
}); 

services.AddIdentity<ApplicationUser, IdentityRole>(o => 
{ 
    o.Password.RequireNonAlphanumeric = false; 
}) 
.AddEntityFrameworkStores<MyContext>() 
.AddDefaultTokenProviders(); 

services.AddMvc(); 

services.AddSession(); 

Любые идеи о том, что я могу сделать?

+0

Вы можете попробовать хранить то тождество связанных данных в базе данных? Вы также можете найти провайдера ASP.Net Identity на основе REDIS, я уверен, что вы найдете хороший пакет nuget. –

+0

Идентификация не использует сеанс, поэтому проблема с чем-то еще – trailmax

ответ

2

Я исправил его! Во-первых, я установить параметры куки, чтобы иметь ExpireTimeSpan:

services.AddIdentity<ApplicationUser, IdentityRole>(o => 
{ 
    o.Password.RequireNonAlphanumeric = false; 
    o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(24); 
    o.Cookies.ApplicationCookie.SlidingExpiration = true; 
}) 
.AddEntityFrameworkStores<MyDbContext>() 
.AddDefaultTokenProviders();  

Кроме того, при использовании внешнего входа, я установить isPersistent аргумент _signInManager.ExternalLoginSignInAsync к true

Смежные вопросы