Asp.net: заменить GenericPrincipal - PullRequest
6 голосов
/ 04 мая 2010

Мне было интересно, как лучше заменить 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

1 Ответ

5 голосов
/ 05 мая 2010

Вам не хватает тонкой детали, нити.

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

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

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

    Context.User = Thread.CurrentPrincipal = new CustomPrincipal(Context.User.Identity /*, add roles here if desired*/ );
...