Подтвердить что ты не робот

Доступ к настройке CookieAuthenticationOptions.LoginPath за пределами Startup.Auth.cs

Я использую аутентификацию cookie с OWIN в настройке .NET MVC 4.5. Я установил конфигурацию аутентификации cookie в Startup.Auth.cs(код ниже), и я хотел бы получить доступ к LoginPath, который я установил в CookieAuthenticationOptions в контроллере, чтобы, если по какой-то причине изменился мой LoginPath, мне нужно только изменить это в одном месте. Так что просто искать что-то вроде

context.GetCookieAuthenticationOptions().LoginPath
Есть ли способ получить доступ к CookieAuthenticationOptions за пределами Startup.Auth.cs или это мой единственный вариант, чтобы сделать что-то вроде добавления appSetting в Web.config, а затем использовать это вместо этого?

Код Startup.Auth.cs, я хотел бы получить доступ к LoginPath за пределами этого файла.

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("Login"),
            SlidingExpiration = true,
            ExpireTimeSpan = _expirationTimeSpan,
            Provider = new CookieAuthenticationProvider
            {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager, DefaultAuthenticationTypes.ApplicationCookie))
            },

        });
4b9b3361

Ответ 1

Нет прямого способа сделать это. Если вы внимательно посмотрите, объект опций файла cookie хранится в AppBuilder классе AppBuilder. Нет доступа к этому свойству (кроме отражения).

Однако вы можете сохранить объект cookieOptions в контексте Owin:

var cookieOptions = new CookieAuthenticationOptions
{
    // ...
    LoginPath = new PathString("/Account/Login"),
    // ...
};

app.UseCookieAuthentication(cookieOptions);
app.CreatePerOwinContext(() => new MyCookieAuthOptions(cookieOptions));

В контроллере вы можете получить доступ к нему следующим образом:

var cookieOptions = HttpContext.GetOwinContext().Get<MyCookieAuthOptions>().Options;

Контекст Owin поддерживает только объект IDisposable, поэтому нам нужно обернуть CookieAuthenticationOptions в объект IDisposable:

public class MyCookieAuthOptions : IDisposable
{
    public MyCookieAuthOptions(CookieAuthenticationOptions cookieOptions)
    {
        Options = cookieOptions;
    }

    public CookieAuthenticationOptions Options { get; }

    public void Dispose()
    {

    }
}