Вы можете попробовать метод "двойной подачи".
Вкратце: при первой отправке отмените ее, но после успешной авторизации запустите ее снова и не отменяйте.
Подробнее:
Вам нужно переписать форму следующим образом:
<form id="loginForm" onSubmit="return App.Auth.login();" method="POST" action="/back-redirector">
/back-redirector
просто перенаправляет обратно на ту же страницу или на главную страницу. Я перенаправляю обратно на ту же страницу.
И ваша App.Auth.login()
функция должна return false
при первом вызове и return true
, если первый вызов привел к успешному входу в систему.
Как это:
letTheLoginFormDoTheSubmit = false;
// flag to show that login was successful
// and we need to trigger password save prompt.
login: function() {
if (letTheLoginFormDoTheSubmit) {
return true;
}
// Do the login
// Start ajax
ajax(login, password, function() {
// This function is called when AJAX has completed
if (loginIsGood) {
letTheLoginFormDoTheSubmit = true;
loginForm.submit(); // trigger submit again
});
return false;
}
Так что же происходит?
- Когда ваша функция входа в систему вызывается в первый раз, она запускает последовательность входа в систему и возвращает false, чтобы остановить обычную отправку формы.
- Функция входа получает данные, и, если вход выполнен успешно, он сохраняет их на стороне браузера, поднимает флаг «все в порядке, вызывает запрос на сохранение пароля» и снова отправляет форму.
- Но поскольку флажок «login», функция не выполняет повторный вход в систему, а просто позволяет браузеру отправлять форму в обычном режиме, и это вызывает запрос сохранения пароля.
Форма отправляется на URL, который просто перенаправляет браузер назад, и не выполняет никакой работы.
Некоторые предостережения:
- Страница будет перезагружена, так что сохраните ваш файл cookie аутентификации как-нибудь локально, или сообщите перенаправителю, что это такое, чтобы он мог включить его в редирект.
- Все данные формы могут пройти через эту вторую отправку. Чтобы избежать этого, удалите соответствующие поля из формы или удалите атрибуты имени.
- Перенаправитель необходим на стороне сервера.
Но в целом это не является серьезным изменением в процессе входа в систему и должно вызывать запрос сохранения пароля в каждом браузере.