Asp.net: замена GenericPrincipal

Я задавался вопросом, что лучший способ состоит в том, чтобы заменить genericPrincipal моим собственным CustomGenericPrincipal.

В данный момент у меня есть что-то вроде этого, но я не уверен, корректно ли это.

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null)
    {
        FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        var identity = new CustomIdentity(authTicket);
        var principal = new CustomPrincipal(identity);

        Context.User = principal;
    }
    else
    {
        //Todo: check if this is correct
        var genericIdentity = new CustomGenericIdentity();
        Context.User = new CustomPrincipal(genericIdentity);
    }
}

Я должен заменить его, потому что мне нужен Принципал, который реализует мой интерфейс ICustomPrincipal, потому что я делаю следующее с Ninject:

Bind<ICustomPrincipal>().ToMethod(x => (ICustomPrincipal)HttpContext.Current.User)
                        .InRequestScope();

Таким образом, что лучший способ состоит в том, чтобы заменить GenericPrincipal?

Заранее спасибо,

Pickels

6
задан Pickels 4 May 2010 в 17:41
поделиться

1 ответ

Вы упускаете тонкую деталь, нить.

    Context.User = Thread.CurrentPrincipal = new CustomPrincipal....

Приведет вас туда, куда вам нужно.

Также я заметил, что вы упомянули, что вам нужно заменить только директора. Если это так, вы можете просто повторно использовать FormsIdentity, который уже был создан для вас, как показано ниже.

    Context.User = Thread.CurrentPrincipal = new CustomPrincipal(Context.User.Identity /*, add roles here if desired*/ );
5
ответ дан 17 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: