Я использую Grails 1.3.7 и последний подключаемый модуль Spring-Security-Core. Я реализовал следующий метод в моем LoginController:
def authAjax = {
response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl
response.sendError HttpServletResponse.SC_UNAUTHORIZED
}
И в моем глобальном файле JavaScript у меня есть следующее:
$.ajaxSetup({
error: function(xhr, status, err) {
if (xhr.status == 401) {
// display a login form in a dialog
}
}
});
Форма входа - это стандартная форма входа непосредственно из документации плагина. Разница лишь в том, что я отправляю свою форму, используя jQuery, вот так:
var params = $('#ajaxLoginForm').serialize();
$.post($('#ajaxLoginForm').attr('action'), params, function(jsonData) {
if (jsonData.success) {
$('#login-dialog').dialog('close');
} else {
alert('TODO: display errors');
}
}, 'json');
Проблема в том, что когда я в первый раз нажимаю кнопку входа в систему, мне кажется, что аутентификация в порядке, но ответ, возвращаемый с сервера, представляет собой перенаправление 302, основанное на заголовке запроса Referer. Таким образом, тело моего $ .post () никогда не запускается. Я возвращаю HTML вместо JSON. На самом деле он не ударил мой метод LoginController.ajaxSuccess до второй отправки. Я прочитал и перечитал документацию, и я должен что-то упустить.
ОБНОВЛЕНИЕ: Похоже, что это может не быть проблемой Реферера, так как во второй раз, когда форма публикуется, Реферер все еще там. Поэтому я совершенно не понимаю, почему мне нужно дважды отправить форму для вызова метода ajaxSuccess.