python-fido2 Yubikey认证后JS if条件跳转失效问题
问题根因
两段代码没生效都是JS基础的作用域和分支覆盖问题:
- 第一种写法里,
stat是在第一个.then回调内用var声明的局部变量,作用域仅限这个回调函数内部,后面链式调用的第二个.then根本访问不到这个变量,运行时会直接报stat is not defined的错误,跳转逻辑完全不会执行。 - 第二种写法虽然把判断和
stat放在了同一个作用域,但没覆盖认证流程抛错的分支:如果认证过程中出现异常(比如用户没按时触摸密钥、密钥不匹配、请求超时),会直接走第二个错误回调弹出提示,不会执行回首页的逻辑。
正确实现
直接替换原有Promise链的逻辑即可,全分支覆盖跳转规则:
.then(function(response) { // 接口正常返回的分支 const isAuthSuccess = response.ok; const statusText = isAuthSuccess ? 'successful' : 'unsuccessful'; alert('Authentication ' + statusText + ' More details in server log...'); if (isAuthSuccess) { // 替换为你实际的认证成功目标页面地址 window.location.replace('认证成功后要跳转的页面地址'); } else { window.location.href = '/'; } }, function(error) { // 认证流程抛错的分支 alert(error); window.location.href = '/'; }) // 原代码最后空的.then和多余的闭合花括号可以直接删掉,不需要额外嵌套
小提示:JS里旧的
var声明变量的作用域规则很容易踩坑,新写逻辑优先用const(声明不需要重新赋值的变量)、let(声明需要修改的变量),作用域逻辑和你熟悉的Python更接近,不容易出这类低级问题。
内容的提问来源于stack exchange,提问作者Paco 2015
相关产品推荐
相关产品推荐

