使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

初级

我有一个使用C#ASP.NET Core 2.2框架编写的应用程序

我正在使用Identity进行用户管理和用户控制。当前,每次用户关闭浏览器并再次打开该应用程序时,都要求他们再次登录。

我想将登录名从会话更改为cookie,该cookie在闲置15分钟后会过期。

这是我添加到Startup类中的内容

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<User()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

    services.AddAuthentication()
            .AddFacebook(facebookOptions =>
    {
        facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
        facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    });

    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    // This code should be executed after the identity id registered to work
    services.ConfigureApplicationCookie(config =>
    {
        config.SlidingExpiration = true;
        config.ExpireTimeSpan = TimeSpan.FromMinutes(15);
        config.Cookie.HttpOnly = true;
        config.Events = new CookieAuthenticationEvents
        {
            OnRedirectToLogin = ctx =>
            {
                if (ctx.Request.Path.StartsWithSegments("/api", StringComparison.CurrentCultureIgnoreCase))
                {
                    ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                }
                else
                {
                    ctx.Response.Redirect(ctx.RedirectUri);
                }

                return Task.FromResult(0);
            }
        };
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

如上所示,我添加了以下内容

config.SlidingExpiration = true;
config.ExpireTimeSpan = TimeSpan.FromMinutes(15);
config.Cookie.HttpOnly = true;

我期望ExpireTimeSpan代码将基于会话的登录名转换为基于cookie代码。如果用户处于非活动状态,则还需要15分钟后的Cookie。SlidingExpiration应更新每个HTTP请求Cookie的到期时间。

如何将基于会话的登录名转换为基于Cookie的登录名?

坦维尔·阿耶尔

在研究了几个小时ASP.NET Core身份之后,终于找到了适合您的解决方案。

转到您的Loginpost方法并按_signInManager.PasswordSignInAsync如下所示编写方法:

var result = await _signInManager.PasswordSignInAsync(Email, Password, isPersistent: true, lockoutOnFailure: true);

这是用于持久性Cookie的第三个参数。根据Microsoft文档

IsPersistent 指示登录cookie在浏览器关闭后是否应保留的标志。

对于外部登录:

转到ExternalLoginCallback您的_signInManager.ExternalLoginSignInAsync方法并按如下所示编写方法:

SignInResult signInResult = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: true);

我已经对它进行了测试,效果很好!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

后台2分钟后如何调用方法

如何禁用ASP.NET Core rc2中的浏览器缓存?

使用时间格式()选择+-2分钟

2分钟后,Nodejs和Express服务器关闭连接

如何使用RXJS每2分钟拨打一次http电话?

在EF Core 2中使用单表名称

即使使用Identity ASP.NET MVC框架关闭浏览器后,如何保持用户登录?

如何使用ImageSharp创建Gif .net Core2

.NET Core 2.1 / Angular-SignalR仅需要2分钟即可连接到集线器

1-2分钟后,req.user使用password.js清除

GC如何与.Net Core 2中的DI配合使用

使用Identity2创建了一个mvc5应用程序,如何设置它以使用会话cookie,因此当浏览器关闭时它们会过期

如何在给定的时间(HH:MM:SS)中添加2分钟的Node?

要使用AD B2C对.NET Core 3.0 WPF桌面客户端进行身份验证,如何使用默认OS浏览器?

如何在Angular 7中将HTTP请求超时增加2分钟以上?

如何使用Android中的广播接收器每2分钟更新一次活动?

如何使用Java + Struts2在浏览器中打开Excel工作表?

如何在Android中每2分钟将位置坐标存储在数组中

使用Twilio的中继服务,Asterisk SIP呼叫在2分钟后结束

Web浏览器请求经常停顿2分钟

如何使用户的点击等待2分钟后再处理?

如何使用crontab每2分钟启用一台打印机

使用Net Core Identity保护Angular 2应用

GCMNetorkManager PeriodicTask只能使用1分钟,而不能使用2分钟

如何使用Java在Selenium Webdriver中的2个浏览器之间切换

使用Logitech mx随时随地关闭浏览器中的选项卡2s

如何使用flask在浏览器中显示来自cv2的图像?

在 OSX 上使用 MySQL 的 .NET Core 2

如何在SQL中每2分钟获取一次记录

TOP 榜单

热门标签

归档