Я задавался вопросом, что лучший способ состоит в том, чтобы заменить 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
Вы упускаете тонкую деталь, нить.
Context.User = Thread.CurrentPrincipal = new CustomPrincipal....
Приведет вас туда, куда вам нужно.
Также я заметил, что вы упомянули, что вам нужно заменить только директора. Если это так, вы можете просто повторно использовать FormsIdentity, который уже был создан для вас, как показано ниже.
Context.User = Thread.CurrentPrincipal = new CustomPrincipal(Context.User.Identity /*, add roles here if desired*/ );