这是我在StackOverflow上的第一篇文章,所以如果我不能说得很清楚,或者我的文章缺少一些信息,我提前道歉。
我试图实现一个完整的密码登录体验与WebAuthn。它目前在Safari上工作,但当我尝试在Chrome上测试时,只有注册过程起作用。所以我可以创建一个密钥,但是当我尝试登录时,条件UI不会显示在Chrome上,尽管它在Safari上没有任何问题。
下面是应该触发条件UI的js代码:
if (window.PublicKeyCredential && PublicKeyCredential.isConditionalMediationAvailable) {
try {
// Is a conditional UI available in this browser?
const cma = await PublicKeyCredential.isConditionalMediationAvailable();
if (cma) {
const user = await authenticate();
if (user) {
loading.start();
location.href = '/home';
} else {
throw new Error('User not found.');
}
}
} catch (e) {
loading.stop();
if (e.name !== 'NotAllowedError') {
console.error(e);
alert(e.message);
} else {
console.log("User cancelled the operation")
}
}
}
使用以下html(autocomplete属性包含webauthn标签,因为它应该):
<form id="ac-login-form" method="POST" action="/auth/username" class="signin-form center">
<div class="form-group">
<input type="text" id="username" class="form-control" placeholder="Username"
aria-labelledby="username-label" name="username"
autocomplete="username webauthn" required autofocus/>
</div>
<div class="form-group">
<input type="submit" class="form-control btn btn-primary submit px-3" value="sign in"/>
</div>
</form>
在彻底查看了我能找到的文档之后,我仍然不知道问题可能来自哪里,因为我没有看到任何缺失的元素,并且相同的代码在safari上运行良好。
如果其他信息可以帮助:我在localhost上运行一个https服务器,后端使用node.js。我不认为问题来自这里,因为,如前所述,这个过程在Safari上运行良好,注册过程也在Chrome上运行。
非常感谢你的帮助。
PS:我正在使用我认为是最新版本的Chrome:版本118.0.5993.70
1条答案
按热度按时间aiazj4mn1#
更新:看起来Chrome中有一个修复,因为它现在可以工作,而无需对代码进行任何更改