c# - 如何将 ASP.NET 身份验证 cookie 设置为在特定日期和时间过期
问题描述
这个答案似乎很全面,但我的应用程序正在使用ApplicationSignInManager
而不是AuthenticationManager
答案使用的,所以它并不真正适用于我的应用程序。
我正在尝试跟踪我的用户登录(这是客户内部使用的专有网站)。所以客户基本上希望登录像考勤卡一样工作,这样老板就可以看到员工何时进入办公室。
此功能意味着我不能依赖每个 ASP.NET Identity 默认行为的持久登录,因为它不允许我控制登录 cookie 是否/何时过期。
我想做的是每天凌晨 4 点使 cookie 过期,无论何时登录。
出于这个原因,在配置中限制 cookie 的生命周期也不能真正满足我的要求。
这是我的登录代码 - 几乎是标准的东西。根据第一个答案,我希望我可以将 cookie 的到期嵌入到SignIn
方法中,但由于我没有使用AuthenticationManager
for 登录,因此似乎没有办法用我当前的代码来做到这一点。
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
如果我需要改变我在这里登录的方式,那很好;我只需要一些关于要进行哪些更改的指导(示例代码会有所帮助)。
提前致谢!
解决方案
由于没有人愿意为我的问题做出贡献,我四处尝试了一堆东西并得出了我自己的答案:
似乎按照我的问题中的链接限制 cookie 在配置中的寿命实际上是要走的路。
now
在 auth config 方法中,我确定和之间有多少小时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))
}
});
}
推荐阅读
- python - 使用 Pyinstaller 从 .py 代码生成 .exe 文件
- javascript - 警告:失败的道具类型:道具“日期”在“日历提供者”中标记为必需,但其值为“未定义”
- typescript - 实现`IGeneratable`的类必须提供`IGeneratorConstructor
`其中`T`是实现`IGeneratable`的类 - curl - curl:重定向 302:不将方法从 POST 更改为 GET
- arrays - 我们如何在 Rust 中操作 u8 数组的第一位?
- c# - 使用 VS 的 2 个不同端口运行 Swagger UI
- java - Hashicorp Nomad 上的 Quarkus
- php - 更新数据库中的图像给出空行
- java - JsonMappingException 上的 Spring Boot 测试给出了低于标准的堆栈跟踪
- excel - 如何在 VBA 中找到列地址(只有字母)并用变量表示列函数?