J'ai la configuration suivante J'ai LockOut.DefaultLockoutTimeSpan
mis à 2 hours
et ApplicationCookie.ExpireTimeSpan
mis à one day
. Mais si l'application est inactive pendant 2 heures, elle ne redirige pas l'utilisateur vers login page
. Dans le View
ci-dessous, j'utilise Ajax
où un événement de clic d'un onglet dans une tabulation obtient un ID de l'onglet et le passe à une méthode d'action appelant. Mais j'ai remarqué que si je laisse l'application inactive pendant 2 heures et que je clique sur l'onglet, la valeur d'id est nulle et donc, comme prévu, la méthode d'action échoue et le message d'alerte dans le bloc error de la méthode Ajax est affiché. Question: Comment puis-je rediriger l'application vers la page de connexion lorsque la session de connexion expire? Évidemment, il me manque quelque chose dans le code ci-dessous. J'utilise ASP.NET Identity-3 pour l'authentification.ASP.NET Core ne redirige pas vers la page de connexion après expiration de la session
MISE À JOUR:
Ce qui se passe est que j'ai trois variables de session importants qui stockent des valeurs qui sont utilisées à travers les pages. Et ces valeurs se perdent toutes les 15-20 minutes environ. Et donc l'application lance un message d'erreur dans le dialogue d'alerte (...) des blocs d'erreur du code Ajax. J'ai donc pensé que cela avait quelque chose à voir avec le cookie d'authentification expirant plus tôt. Mais il semble que la question est plus liée à l'expiration de la session plus tôt que j'en ai besoin.
StartUp.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.AddDistributedMemoryCache();
services.AddSession();
services.Configure<IdentityOptions>(options => {
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(120); //The amount of time in minutes a user is locked out when a lockout occurs
// Cookie settings
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1); //Controls how much time the authentication ticket stored in the cookie will remain valid from the point it is created. Defaults to 14 days.
options.Cookies.ApplicationCookie.LoginPath = "/Account/LogIn"; //When a user is unauthorized, they will be redirected to this path to login. Defaults to /Account/Login.
options.Cookies.ApplicationCookie.LogoutPath = "/Account/LogOut";
});
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
...
MyView:
<html>
...
<div>Tabstrib here with tab1, tab2</div>
...
@section scripts
{
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
<script>
$(document).ready(function() {
...
$('#myTabstripID li').click(function() {
var li_id = $(this).attr("id");
$.ajax({
url: '@Url.Action("ActionName", "ContrlName")',
data: { calledFrom: li_id },
contentType: 'application/json',
dataType: 'html',
type: 'GET',
cache: false,
success: function (data) {
if (li_id == 'Tab1')
$('#menuAP').html(data);
else if (li_id == 'Tab2')
$('#menuUP').html(data);
},
error: function (jqXHR, textStatus) {
alert('Error occurred');
}
});
});
...
}
Lorsqu'un appel Ajax frappe un site Web alors que ce site Web nécessite une réauthentification, ne devrait-il pas renvoyer une réponse 401 (Autorisation requise) au lieu de rediriger vers la page de connexion? Je pense que c'est la nature de l'API Web. –
@Afshar Je n'utilise pas l'API Web - C'est une application web. Mais je vois votre point. Le problème peut sembler être lié à l'expiration des variables de session. J'ai ajouté une section ** UPDATE ** à cet article. Auriez-vous une idée sur la façon de résoudre le problème lié à la variable de session? – nam