我有一个具有以下布局的应用程序。在我的共享视图文件夹中,_Layout.cshtml
,_SideNav.cshtml
和_CurrentUser.cshtml
。
在_Layout.cshtml
我有:
@{ Html.RenderPartialIf("_SideNav", Request.IsAuthenticated); }
在_SideNav.cshtml
我有:
@{ Html.RenderPartial("_CurrentUser"); }
在_CurrentUser.cshtml
我有:
<div class="login-info">
<span>
<a href="javascript:void(0);" id="show-shortcut" data-action="toggleShortcut">
<img src="~/content/img/avatars/sunny.png" alt="me" class="online" />
<span>@User.Identity.Name</span>
<i class="fa fa-angle-down"></i>
</a>
</span>
</div>
我们使用FormsAuthentication
来验证用户身份。我们未使用Identity
附带的标准ASP.Net MVC 5
身份验证,因为我们使用的是LDAP
服务器。
FormsAuthentication.SetAuthCookie(username, isPersistent);
.....
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(username, "Forms"), roles);
我们在Cookie中使用username
,以便我们可以轻松地从LDAP
服务器获取信息。
问题:@User.Identity.Name
会返回该用户名。但我需要显示用户的全名。我们在进行身份验证时可以访问全名。但不知道如何使用它。
如何将FullName
值从AccountController
传递到_CurrentUser.cshtml
局部视图?有点像@User.Identity
之类的全局容器,可以设置更多属性。
答案 0 :(得分:1)
您可以尝试类似于 - &gt;
的内容public static MyAuthenticationTicket GetIMyUserTicket()
{
//Get custom user data object from forms auth cookie
MyAuthenticationTicket result= null;
if (HttpContext.Current.User == null)
return null;
if (!HttpContext.Current.Request.IsAuthenticated)
return null;
FormsIdentity ident = (FormsIdentity)HttpContext.Current.User.Identity;
if (ident == null)
return null;
FormsAuthenticationTicket ticket = ident.Ticket;
if (ticket == null)
return null;
if (!FormsAuthentication.CookiesSupported)
{
//If cookie is not supported for forms authentication, then the
//authentication ticket is stored in the Url, which is encrypted.
//So, decrypt it
ticket = FormsAuthentication.Decrypt(ident.Ticket.Name);
}
string userDataString = ticket.UserData;
if(!String.IsNullOrEmpty(userDataString))
result= new MyAuthenticationTicket(userDataString);
return result;
}
答案 1 :(得分:1)
你可以使用这样的东西
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
viewModel.Email,
YOUR_ISSUE_DATE,
YOUR_EXPIRE_DATE,
viewModel.RememberMe,
JsonConvert.SerializeObject(user),
FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie authcookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
Response.Cookies.Add(authcookie);
答案 2 :(得分:0)
使用ClaimsIdentity
。
当用户登录您的应用时,请将其姓名添加到您的身份中。
ClaimsIdentity claims = new ClaimsIdentity();
claims.AddClaim(new Claim("name", "value"));
然后创建一个扩展方法来获取您的名字
public static string GetName(this IPrincipal principal)
{
return ((ClaimsIdentity)principal.Identity).Claims.Where(x => x.Type == "name").FirstOrDefault().Value;
}
现在将其用作@User.GetName()
更新
或者在您登录控制器时使用UserManager
来获取用户身份。
像这样:
ClaimsIdentity claims = UserManager.CreateIdentityAsync(user, CookieAuthenticationDefaults.AuthenticationType);
claims.Add(new Claim("name" , "value"));
AuthenticationManager.SignIn(claims);