forum.beginner.center/:1 Contenu mixte : La page « https://forum.beginner.center/ » a été chargée via HTTPS, mais a demandé une police de caractères non sécurisée « http://forum.beginner.center/fonts/JetBrainsMono-Regular.woff2?v=0.0.19 ». Cette requête a été bloquée ; le contenu doit être servi via HTTPS.
forum.beginner.center/:1 Contenu mixte : La page « https://forum.beginner.center/ » a été chargée via HTTPS, mais a demandé une police de caractères non sécurisée « http://forum.beginner.center/fonts/JetBrainsMono-Bold.woff2?v=0.0.19 ». Cette requête a été bloquée ; le contenu doit être servi via HTTPS.
app.js:270 ℹ️ Discourse v3.5.0.beta9-dev — https://github.com/discourse/discourse/commits/33dfd7dba9 — Ember v5.12.0
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
[Report Only] Refusé d'évaluer une chaîne en tant que JavaScript car « unsafe-eval » n'est pas une source autorisée de script dans la directive de politique de sécurité du contenu suivante : « script-src 'nonce-4YvvTZffYuqGaENC8DnQ7yeNg' 'strict-dynamic' ».
analytics.eu.umami.is/script.js:1 Échec du chargement de la ressource : net::ERR_CONNECTION_CLOSED
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
La prévention du suivi a bloqué l'accès au stockage pour <URL>.
deprecated.js:62 Avis de dépréciation : La définition de la propriété timezone de l'objet user est dépréciée. Utilisez l'objet user_option à la place [déprécié depuis Discourse 2.9.0.beta12] [suppression dans Discourse 3.0.0.beta1] [id de dépréciation : discourse.user.userOptions]
a @ deprecated.js:62
security:1 Le traitement Autofocus a été bloqué car un document a déjà un élément focalisé.
completion_list.html:14 GET chrome-extension://mfbcdcnpokpoajjciilocoachedjkima/heuristicsRedefinitions.js net::ERR_FILE_NOT_FOUND
completion_list.html:13 GET chrome-extension://mfbcdcnpokpoajjciilocoachedjkima/extensionState.js net::ERR_FILE_NOT_FOUND
completion_list.html:12 GET chrome-extension://mfbcdcnpokpoajjciilocoachedjkima/utils.js net::ERR_FILE_NOT_FOUND
ajax.js:188 POST https://forum.beginner.center/u/register_passkey.json 401 (Unauthorized)
send @ jquery.js:9940
ajax @ jquery.js:9521
o @ ajax.js:188
(anonymous) @ rsvp-DaQAFb0W.js:435
e @ rsvp-DaQAFb0W.js:451
A @ ajax.js:201
registerPasskey @ user.js:650
createPasskey @ user-passkeys.gjs:86
await in createPasskey
didConfirm @ user-passkeys.gjs:140
didConfirmWrapped @ dialog.js:134
_join @ index.js:788
join @ index.js:605
p @ index.js:152
(anonymous) @ index.js:250
submit @ confirm-session.gjs:84
await in submit
(anonymous) @ d-button.gjs:138
invoke @ index.js:264
flush @ index.js:180
flush @ index.js:334
_end @ index.js:762
end @ index.js:565
_runExpiredTimers @ index.js:869
setTimeout
setTimeout @ index.js:39
_installTimerTimeout @ index.js:912
_later @ index.js:823
later @ index.js:652
T @ index.js:562
_triggerAction @ d-button.gjs:135
click @ d-button.gjs:93
user-passkeys.gjs:104 {jqXHR: {…}, textStatus: 'error', errorThrown: ''}errorThrown: \"\"jqXHR: abort: ƒ (e)always: ƒ ()catch: ƒ (e)done: ƒ ()fail: ƒ ()getAllResponseHeaders: ƒ ()getResponseHeader: ƒ (e)jqTextStatus: \"error\"overrideMimeType: ƒ (e)pipe: ƒ ()progress: ƒ ()promise: ƒ (e)readyState: 4requestedUrl: \"/u/register_passkey.json\"responseJSON: {errors: Array(1)}responseText: \"{\\\"errors\\\":[\\\"The origin of the authentication request does not match the server origin.\\\"]}\"setRequestHeader: ƒ (e,t)state: ƒ ()status: 401statusCode: ƒ (e)statusText: \"error\"then: ƒ (e,i,n)[[Prototype]]: ObjecttextStatus: \"error\"[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
createPasskey @ user-passkeys.gjs:104
await in createPasskey
didConfirm @ user-passkeys.gjs:140
didConfirmWrapped @ dialog.js:134
_join @ index.js:788
join @ index.js:605
p @ index.js:152
(anonymous) @ index.js:250
submit @ confirm-session.gjs:84
await in submit
(anonymous) @ d-button.gjs:138
invoke @ index.js:264
flush @ index.js:180
flush @ index.js:334
_end @ index.js:762
end @ index.js:565
_runExpiredTimers @ index.js:869
setTimeout
setTimeout @ index.js:39
_installTimerTimeout @ index.js:912
_later @ index.js:823
later @ index.js:652
T @ index.js:562
_triggerAction @ d-button.gjs:135
click @ d-button.gjs:93
Oh hmm, c’est utile, mais les erreurs 401 peuvent être déclenchées par une multitude de raisons. Je vais vérifier avec notre expert résident en passkeys.
Pouvez-vous vous assurer que votre site est configuré pour tout servir en https ? La vérification du défi de la clé d’accès nécessite que toutes les requêtes passent par https. De plus, le domaine entre le navigateur et le serveur doit correspondre exactement. S’il y a une incohérence quelque part, la vérification échouera.
Nous avons un paramètre pour cela, force_https, vous pouvez essayer, cela pourrait aider (mais faites attention, cela pourrait aussi vous bloquer si le serveur n’est pas correctement configuré).
Désolé pour le retard. Le problème est effectivement lié à votre proxy. Je ne peux pas dire exactement ce que c’est, mais l’un de vos noms de domaine, protocoles (http ou https) et ports pose problème.
Les Passkeys vérifient que le frontend et le backend s’exécutent sur le même domaine, protocole et port. S’il y a une discordance, vous obtiendrez une erreur comme celle-ci.
Dans le CLI de Rails, pouvez-vous essayer ceci :
DiscourseWebauthn.origin
et le comparer à l’URL que vous utilisez pour accéder au site dans le navigateur ? Les deux devraient correspondre.
Autant que je sache, la norme Webauthn pour Passkey repose sur une connexion sécurisée entre la partie de confiance (Discourse) et le client (navigateur ou appareil mobile) et l’authentificateur (par exemple, une yubikey). Ainsi, nous avons besoin de https pour la communication provenant de l’application Discourse. Forcer https pourrait être la solution, mais juste un en-tête pour
proxy_set_header X-Forwarded-Proto https;
pourrait également suffire. Si forcer https aide (ce qui est de toute façon recommandé), tout va bien.