Я уже замечал эту ошибку на Meta, но после последнего обновления она появилась и на моих развёртываниях: при нажатии на «Войти» появляется модальное окно «С возвращением », которое сразу же перекрывается сообщением «К сожалению, произошла ошибка». При нажатии «OK» окно с ошибкой закрывается, и процесс аутентификации можно продолжить в обычном режиме.
В консоли есть запись об ошибке:
ajax-error.js:9:12
l ajax-error.js:9
p ajax-error.js:95
passkeyLogin login.js:147
2 лайка
Moin
01.Февраль.2024 00:38:50
2
Какой браузер вы используете?
Firefox 115.7.0esr (64-бит) в Debian 12.
Discourse v3.3.0.beta1-dev — Commits · discourse/discourse · GitHub — Ember v5.5.0
1 лайк
Moin
01.Февраль.2024 00:41:13
4
2 лайка
Это регрессия, внесенная здесь: FEATURE: Allow users to confirm session with passkeys (#24337) · discourse/discourse@c6ead3f · GitHub
) {
if (!isWebauthnSupported()) {
return errorCallback(I18n.t("login.security_key_support_missing_error"));
}
// we need to check isConditionalMediationAvailable for Firefox
// without it, Firefox will throw console errors
// We cannot do a general check because iOS Safari and Chrome in Selenium quietly support the feature
// but they do not support the PublicKeyCredential.isConditionalMediationAvailable() method
if (mediation === "conditional" && isFirefox) {
const isCMA = await PublicKeyCredential.isConditionalMediationAvailable();
if (!isCMA) {
return;
}
}
try {
const resp = await ajax("/session/passkey/challenge.json");
const credential = await navigator.credentials.get({
publicKey: {
Код, по-моему, нужно перенести в блок try{} ниже; иначе ошибка будет отображаться в интерфейсе вместо консоли.
userHandle: bufferToBase64(credential.response.userHandle),
};
} catch (error) {
if (error.name === "AbortError") {
// no need to show an error when the cancelling a pending ceremony
// this happens when switching from the conditional method (username input autofill)
// to the optional method (login button) or vice versa
return null;
}
if (mediation === "conditional") {
// The conditional method gets triggered in the background
// it's not helpful to show errors for it in the UI
// eslint-disable-next-line no-console
console.error(error);
return null;
}
if (error.name === "NotAllowedError") {
return errorCallback(I18n.t("login.security_key_not_allowed_error"));
} else if (error.name === "SecurityError") {
4 лайка
pmusaraj
(Penar Musaraj)
02.Февраль.2024 21:40:55
7
Спасибо за отчет. Это должно быть исправлено в FIX: Handle old Firefox versions that do not support isConditionalMed… by pmusaraj · Pull Request #25549 · discourse/discourse · GitHub . Мне удалось воспроизвести проблему только с этой версией Firefox на Windows/macOS, но исправление должно работать и для других операционных систем.
3 лайка
pmusaraj
(Penar Musaraj)
Закрыл(а) тему
06.Февраль.2024 22:41:30
9
Эта тема была автоматически закрыта через 4 дня. Новые ответы больше не принимаются.