我想为MVC 5(OWIN)网站的身份验证Cookie提供两项功能:-
用户登录后,该cookie及其包含的声明就会在其浏览器上。
尽管每次访问服务器时都会这样做,但我设法获得了cookie信息。
就强制登录而言,我要么更新cookie(如果用户未与网站进行交互就不可能),要么在每次登录时按名称查找用户。
我的回答如下-如果有人有更好的答案,请告诉我
答案 0 :(得分:0)
在OWIN启动类中,我添加了一个自定义身份验证方法。管理员可以在身份数据库中设置一个字段,以强制下次登录。缺点是每次用户访问网页时都会对数据库造成打击。
如果用户这次必须登录,则清除“强制登录”标志,该用户注销并重定向到主页,然后转到主页(并在登录后重定向回主页)。
此代码还检索cookie信息,以显示在管理员可以查看的用户列表中。
private static Task MyCustomValidateIdentity(CookieValidateIdentityContext context)
{
var db = ApplicationDbContext.Create();
var userName = context.Identity.GetUserName();
var user = (from u in db.Users where u.UserName == userName select u).FirstOrDefault();
if (user != null)
{
if (user.ForceLoginNextTime)
{
user.ForceLoginNextTime = false;
db.SaveChanges();
context.OwinContext.Authentication.SignOut(context.Options.AuthenticationType);
context.Response.Redirect("/Home");
}
}
var i = (from u in __userInfo where u.userName == userName select u).FirstOrDefault();
if (i == null)
{
i = new UserInfo();
__userInfo.Add(i);
}
i.userName = userName;
i.CookieIssuedUtc = context.Properties.IssuedUtc;
i.CookieExpiresUtc = context.Properties.ExpiresUtc;
i.CookieIsPersistent = context.Properties.IsPersistent;
return Task.FromResult(0);
}