我使用Asp.Net Identity来控制我的应用程序的授权。现在,我需要这样做:如果用户在30分钟内没有操作,请跳转到登录页面,当他登录时不选择“isPersistent”复选框。 并且,如果他选择“isPersistent”复选框,请将Cookie的到期日期设置为14天。 我尝试通过更改Startup.Auth.cs这样做:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});
}
和SignIn代码如下:
private async Task SignInAsync(User user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
if (isPersistent)
{
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
else
{
AuthenticationManager.SignIn(new AuthenticationProperties() { ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddMinutes(30)) }, identity);
}
}
但我发现当用户没有选择isPersistent复选框时,cookies的截止日期已经是“会话”,而不是当前时间加上30分钟。
使用像之后的代码时的Cookie状态,因此“记住我”复选框无效。:(。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(30),
SlidingExpiration = true,
CookieName = WebHelpers.ConstStrings.AUTHCOOKIESNAME
});
答案 0 :(得分:36)
如果IsPersistent
的{{1}}属性设置为false,则Cookie过期时间设置为Session。
如果复选框"请记住我" 已选中,然后AuthenticationProperties
将创建一个Cookie,其过期时间等于您在AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true }, userIdentity);
中设置的ExpireTimeSpan
(默认为14天)。
如果复选框"请记住我"如果未选中,则必须使用Startup.cs
。同样AuthenticationManager.SignIn(new AuthenticationProperties{ IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30)}, userIdentity);
设置为true,但现在我们为ExpiresUtc提供一个值,因此它不会使用来自IsPersistent
的{{1}}。
CookieAuthenticationOptions
答案 1 :(得分:7)
使用此...
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(1),
});
}
答案 2 :(得分:4)
为了实现您在ASP.NET Core 3.1中描述的功能,我通过以下方式在Startup
中配置身份验证:
services.ConfigureApplicationCookie(o =>
{
...
o.ExpireTimeSpan = TimeSpan.FromMinutes(30);
o.SlidingExpiration = true;
...
o.Events.OnSigningIn = ctx =>
{
if (ctx.Properties.IsPersistent)
{
var issued = ctx.Properties.IssuedUtc ?? DateTimeOffset.UtcNow;
ctx.Properties.ExpiresUtc = issued.AddDays(14);
}
return Task.FromResult(0);
};
});
使用OnSigningIn
回调,如果单击“ isPersistent”复选框,我将过期日期显式设置为现在+ 14天。
答案 3 :(得分:1)
我遇到了同样的问题,这段代码对我有用(在Startup.cs文件中)..
services.Configure<IdentityOptions>(options =>
{
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(9999);
});
这会给持久性cookie增加大约 27年(或永不过期)。
注意:如果您希望减少到期时间,可以使用TimeSpan.FromMinutes(1);
1分钟或TimeSpan.FromSeconds(30);
30秒等。