Özel bir iprincpal ve iidentity nesnesinin uygulanmasına takıldım. Bu hakkın nasıl uygulanacağını araştırmak ve daha fazla bilgi ile genişletmek için bir günümü geçiriyorum.Özel üyelik ve rol sağlayıcısı kullanımıyla MVC'de IPrincipal ve IIdentity'nin uygulanması
Bilgileri @Context.User.Identity.Name
tam adı veya başka bir şey gibi özel değişkenler ile genişletmek istiyorum.
DÜZENLEME: Şimdi ben şu kodu var ama ben System.Web.Security.FormsIdentity
CustomPrincipal
için döküm yapılacak olamayacağını bir hata alıyorum @((CustomPrincipal)Context.User.Identity).Nachname
okumaya çalışırsanız.
Herhangi bir fikrin var mı?
public class CustomPrincipal : GenericPrincipal
{
public CustomPrincipal(IIdentity identity, String[] roles) : base(identity, roles){
}
public String Vorname { get; set; }
public String Nachname { get; set; }
}
AccountModel:
public class FormsAuthenticationService : IFormsAuthenticationService
{
public void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Der Wert darf nicht NULL oder leer sein.", "userName");
// Grab user information to insert
KIMembershipUser membershipUser = (KIMembershipUser)Membership.GetUser(userName);
var customInfo = String.Format("{0}|{1}", membershipUser.Vorname, membershipUser.Nachname);
// Create and encrypt the ticket
var ticket = new FormsAuthenticationTicket(
2, // Version number
userName, // Username
DateTime.Now, // Issue date
DateTime.Now.AddMinutes(30), // Expiration date
createPersistentCookie, // Is it persistent?
customInfo // User data
);
var encTicket = FormsAuthentication.Encrypt(ticket);
// Store the ticket into a cookie
var cookie = FormsAuthentication.GetAuthCookie(FormsAuthentication.FormsCookieName,createPersistentCookie);
cookie.Value = encTicket;
// Append the cookie to the response
HttpContext.Current.Response.Cookies.Add(cookie);
//FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
global.asax:
protected void Application_PostAuthenticateRequest(){
// Collect current security information
var principal = HttpContext.Current.User as RolePrincipal;
if (principal == null)
return;
var identity = principal.Identity as FormsIdentity;
if (identity == null)
return;
var roles = principal.GetRoles();
// Extract user data in the authentication ticket
var customInfo = identity.Ticket.UserData;
var tokens = customInfo.Split('|');
// Build a richer principal object
var CustomPrincipal = new CustomPrincipal(identity, roles){
Vorname = tokens[0],
Nachname = tokens[1]
};
// Store the new principal in the HttpContext
HttpContext.Current.User = CustomPrincipal;
}
ait? –
Bu nesnelerin olduğunu bilmiyordum. Onları nasıl uzatırım? – float
Onları genişletmek (bunlardan miras) yapmanız gerekmeyebilir, yapmanın en kolay yolu her birinin yeni bir örneğini oluşturmaktır: http://msdn.microsoft.com/en-us/library/y9dd5fx0(v=VS .100) .aspx –