У нас есть пользовательский поставщик cookie cookie, который ставит для файла cookie auth имя хоста, такого как .domain.com
вместо domain.com
или my.domain.com
. Мы делаем это, чтобы файлы cookie работали во всех субдоменах и доменах. Это так просто, как показано ниже.
Вопрос
При первой же попытке после холодного запуска приложения cookie STILL несет домен my.domain.com
(наши логины находятся на my.domain.com
) DESPITE, устанавливая его на .domain.com
после выполнения кода SubdomainCookieAuthentication
ниже (проверяется с помощью контрольных точек). При последующих попытках входа в систему имя хоста cookie прекрасное.
Вопрос
Как я могу исправить это, чтобы он работал даже с первой попытки?
код
Пользовательский файл cookie
public class SubdomainCookieAuthentication : CookieAuthenticationProvider
{
public override void ResponseSignIn(CookieResponseSignInContext context)
{
// We need to add a "." in front of the domain name to
// allow the cookie to be used on all sub-domains too
var hostname = context.Request.Uri.Host;
// works for www.google.com => google.com
// will FAIL for www.google.co.uk (gives co.uk) but doesn't apply to us
var dotTrimmedHostname = Regex.Replace(hostname, @"^.*(\.\S+\.\S+)", "$1");
context.Options.CookieDomain = dotTrimmedHostname;
base.ResponseSignIn(context);
}
}
Это инициализируется внутри класса запуска Owin следующим образом
Класс: Startup
Файл: App_start\Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new SubdomainCookieAuthentication()
});
}