This answer seems pretty comprehensive,但是我的应用使用的是ApplicationSignInManager
而不是答案使用的AuthenticationManager
,因此它实际上不适用于我的应用。
我正在尝试跟踪我的用户登录名(这是客户端内部使用的专有网站)。因此,客户基本上希望登录可以像时间卡一样工作,以便老板可以看到员工何时进入办公室。
此功能意味着我不能依赖于ASP.NET Identity默认行为的持久登录,因为它不允许我控制登录cookie是否过期。
我想做的是每天凌晨4点使cookie失效,无论何时登录。
由于这个原因,limiting the cookie's lifespan in configs也不满足我的要求。
这是我的登录代码-几乎是标准的东西。对于第一个答案,我希望可以将Cookie的到期日嵌入SignIn
方法中,但是由于我没有使用AuthenticationManager
进行登录,因此似乎没有办法用我当前的代码执行此操作。
var manager = Context.GetOwinContext().GetUserManager<UserManager>();
var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
// Note that this always persists the login cookie.
var result = signinManager.PasswordSignIn(Email.Text, Password.Text, true, shouldLockout: false);
// Evaluation of result below
如果我需要更改在这里进行登录的方式,那就很好了;我只需要进行一些更改方面的指导(示例代码会有所帮助)。
谢谢!
答案 0 :(得分:0)
由于没有人愿意回答我的问题,所以我四处尝试了很多东西,并得出了自己的答案:
我问题中的每个链接似乎像limiting the cookie's lifespan in configs,实际上是解决之道。
在auth config方法中,我确定now
和4am tomorrow
之间有多少小时,然后将cookie的ExpireTimeSpan
设置为此。
public void ConfigureAuth(IAppBuilder app)
{
var expiryDate = DateTime.Now.Date.AddDays(1).AddHours(4);
var ts = expiryDate - DateTime.Now;
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
ExpireTimeSpan = TimeSpan.FromHours(ts.Hours),
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
}