gpt4 book ai didi

c# - 使用自定义成员资格和角色提供者在 MVC 中实现 IPrincipal 和 IIdentity

转载 作者:太空狗 更新时间:2023-10-29 23:26:04 24 4
gpt4 key购买 nike

我坚持执行自定义 iprincpal 和 iidentity 对象。我现在花了一天时间搜索如何实现这些权利并使用更多信息扩展它。

我想使用全名或其他自定义变量扩展信息 @Context.User.Identity.Name

编辑:现在我得到了以下代码,但是如果我尝试读取 @((CustomPrincipal)Context.User.Identity).Nachname 我会收到错误消息System.Web.Security.FormsIdentity 无法转换为 CustomPrincipal

有什么想法吗?

public class CustomPrincipal : GenericPrincipal
{
public CustomPrincipal(IIdentity identity, String[] roles) : base(identity, roles){

}
public String Vorname { get; set; }
public String Nachname { get; set; }
}

账户模型:

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();
}
}

全局.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;
}

最佳答案

使用 (CustomPrincipal)Context.User).Nachname 而不是 (CustomPrincipal)Context.User.Identity).Nachname

关于c# - 使用自定义成员资格和角色提供者在 MVC 中实现 IPrincipal 和 IIdentity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com