首先,我将与ASP.NET安全系统进行比较。
当我在ASP.NET中使用MVC开发时,我会使用它提供的安全系统。当会话到期并且框架重定向到登录页面时,在重定向之前,它会发送一个禁止的错误(401),该错误封装在XHR对象中。然后,我使用以下Javascript方法对其进行验证并向用户显示一条消息,然后重新加载页面,以便该框架自动重定向到登录页面:
function checkUserSession(xhr) {
// Si es 401, es porque se debe redireccionar al login
//alert(JSON.stringify(xhr));
if (xhr.getResponseHeader("X-Responded-JSON") != null
&& JSON.parse(xhr.getResponseHeader("X-Responded-JSON")).status == "401")
{
BootstrapDialog.alert({
type: BootstrapDialog.TYPE_WARNING,
title: 'Sesión Expirada',
message: 'La sesión de usuario caducó.<br /><br />Presione Aceptar para autenticarse y posteriormente vuelva a realizar la acción.',
callback: function (result) {
location.reload();
}
});
}
}
当我使用Ajax调用动作时,我会进行验证。例如,调用该操作以填充网格。如果我不进行该验证,则会在内部调用登录页面,因此网格不会执行任何操作,并且用户永远不会收到有关会话已过期的通知。
好吧...我试图使用Symposony 4中的FOSUserBundle完成相同的任务。但是,当我使用Ajax调用操作时,会话已经过期。框架只是重定向到登录页面,导致302类型的响应,这实际上不是错误,因此我不知道如何捕获它。
您对此有何看法?我需要在数据表中以及加载引导模态对话框时检测到这种情况,因为我是使用ajax加载内容的。
对于数据表,当从ajax返回数据时会引发一个事件...但是我不能使用该事件,因为在实际执行重定向到登录页面时会调用该事件....所以我不知道如何检测禁止或重定向条件。
FOSUserBundle是否允许针对这种情况配置响应?