在ASP .NET Core中,可以使用身份验证中间件和会话来实现在特定时间或经过x时间后登出用户。下面是一个示例:
public void ConfigureServices(IServiceCollection services)
{
// 添加身份验证服务
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
});
// 添加会话服务
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30); // 设置会话超时时间为30分钟
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
// 添加MVC服务
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 启用身份验证中间件
app.UseAuthentication();
// 启用会话中间件
app.UseSession();
// 其他中间件配置...
// 启用MVC中间件
app.UseMvc();
}
public async Task Login(LoginViewModel model)
{
// 验证用户登录信息...
// 如果登录成功
var claims = new List
{
new Claim(ClaimTypes.Name, model.Username),
// 其他用户信息的claim
};
var userIdentity = new ClaimsIdentity(claims, "login");
var principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
// 设置会话
HttpContext.Session.SetString("LastLoginTime", DateTime.Now.ToString());
// 其他逻辑...
}
var lastLoginTime = DateTime.Parse(HttpContext.Session.GetString("LastLoginTime"));
var currentTime = DateTime.Now;
var logoutTimeThreshold = TimeSpan.FromMinutes(60); // 设置登出时间阈值为60分钟
if (currentTime - lastLoginTime > logoutTimeThreshold)
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
// 其他登出逻辑...
}
请注意,上述代码仅用于示例目的,您需要根据自己的需求进行调整。另外,还可以使用定时任务或后台服务来定期检查并登出用户。