カスタム IIdentity 実装があります。
public class FeedbkIdentity : IIdentity
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name { get; set; }
public FeedbkIdentity()
{
// Empty contructor for deserialization
}
public FeedbkIdentity(string name)
{
this.Name = name;
}
public string AuthenticationType
{
get { return "Custom"; }
}
public bool IsAuthenticated
{
get { return !string.IsNullOrEmpty(this.Name); }
}
}
およびカスタム IPrincipal
public class FeedbkPrincipal : IPrincipal
{
public IIdentity Identity { get; private set; }
public FeedbkPrincipal(FeedbkIdentity customIdentity)
{
this.Identity = customIdentity;
}
public bool IsInRole(string role)
{
return true;
}
}
global.asax.cs で FormsAuthenticationTicket userData を逆シリアル化し、置き換えています
HttpContext.Current.User:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
JavaScriptSerializer serializer = new JavaScriptSerializer();
FeedbkIdentity identity = serializer.Deserialize<FeedbkIdentity>(authTicket.UserData);
FeedbkPrincipal newUser = new FeedbkPrincipal(identity);
HttpContext.Current.User = newUser;
}
}
次に、Razor ビューで次のことができます。
@(((User as FeedbkPrincipal).Identity as FeedbkIdentity).FirstName)
私はすでに Ninject を使用してメンバーシップ プロバイダーのカスタム ユーザー リポジトリを挿入しており、IPrincipal を HttpContext.Current.User にバインドしようとしています。
internal class NinjectBindings : NinjectModule
{
public override void Load()
{
Bind<IUserRepository>().To<EFUserRepository>();
Bind<IPrincipal>().ToMethod(ctx => ctx.Kernel.Get<RequestContext>().HttpContext.User).InRequestScope();
}
}
しかし、うまくいきません。
私がやろうとしているのは、次のようにカスタム IIdentity プロパティにアクセスできるようにすることだけです。
@User.Identity.FirstName
どうすればこれを機能させることができますか?
編集
ここで提案されているように、IPrincipal を HttpContext.Current.User にバインドすることで期待していました: MVC3 + Ninject: ユーザー IPrincipal を注入する適切な方法は何ですか? アプリケーションでアクセスできるようになり@User.Identity.FirstName
ます。
そうでない場合、リンクされた質問に示されているように、IPrincipal を HttpContext.Current.User にバインドする目的は何ですか?