问题描述
我想验证的基础上User.Identity.Name用户,并从样作用和最后的loggedIn日期等的SQL Server数据库中的其他细节。
登录后,我应该授权后续调用相同的用户没有击中数据库。
不过我打,并在初始登录加载用户信息和我存储在会话。
下面是我的SQL表
ApplicationUser
- 用户ID - >窗户存放在这里的身份名称映射
- 显示名称
- 角色ID
- LastLoginDate
- IsActive
登录控制器逻辑
公众的ActionResult登录()
{
字符串userid = User.Identity.Name;
用户id = userId.Substring(userId.IndexOf(@\\)+ 1);
VAR键=角色。 +用户id;
VAR角色= HttpContext.Cache [关键]
如果(角色== NULL)
{
用户的用户= AdminService.SelectUser(用户ID);
角色=新的String [] {} user.Role.RoleName;
HttpContext.Cache.Add(键,角色,空,
DateTime.Now.AddMinutes(HttpContext.Session.Timeout)
Cache.NoSlidingExpiration); HttpContext.User中= = Thread.CurrentPrincipal中新
的GenericPrincipal(User.Identity,角色);
HttpContext.Session [与loggedInUser] =用户;
}
}
此外,我有以下code授权每个requestin MVC3用户
无效MvcApplication_PostAuthenticateRequest(对象发件人,EventArgs的发送)
{
如果(User.Identity.IsAuthenticated)
{
字符串userid = User.Identity.Name;
用户id = userId.Substring(userId.IndexOf(@\\)+ 1);
VAR键=角色。 +用户id;
VAR角色= HttpContext.Cache [关键]
如果(角色!= NULL)
{
HttpContext.Current.User =
= Thread.CurrentPrincipal中
新的GenericPrincipal(User.Identity,角色);
}
}
}
不过,我建议改变这个上面的逻辑,我得到的一个问题,同时访问存储在一个会话的用户对象。我不知道为什么它是这样的。
做任何一件有其他可能的code /逻辑做上述混合身份验证?
编辑:我在访问得到错误HttpContext.Session [与loggedInUser]在其他一些控制器方法
You are not storing the info in a session. You are storing it in the Cache. That's your problem. The Cache is shared between all users of your application. So instead of using HttpContext.Cache
you could use the HttpContext.Session
.
Alternatively to using sessions and caches you could store thisinformation inside the UserData portion of the forms authentication cookie as I have illustrated in this post.
这篇关于混合Windows身份验证与SQL Server自定义身份验证MVC3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!