验证安全码
用户可以设置安全码,这是一个 6 个数字的密码,如果你还不知道安全码,建议导航到菜单 8021
,
设置安全码试一下。
注意安全码是可选的特征,用户可以选择设置或不设置,不能假设用户一定设置了安全码, 如果用户设置了安全码,则在执行需要保护的操作时,会弹出下面这样的框:
安全码的定义和作用
安全码是为了减少或防止用户登录系统后进行误操作而提供的一种保护措施,它不属于也不代替多因素认证, 而是以一种简单的方式来防止用户操作被冒充,例如在公共场所忘记退出登录。 所以安全码的保护级别是中级,对于特别敏感的操作,例如涉及资金类的,应该采用更高的保护措施。
另外,安全码是可选的功能,用户不一定会设置。
如何保护
下面是如何验证安全码的方法:
import { useSecretCode } from '~/comp/secretcode';
export default function OTP() {
const secretCode = useSecretCode();
const onVerify = async () => {
try {
const secretcode_token = await secretCode();
await post('/protected', new URLSearchParams({
secretcode_token, ...
}));
...
} catch (err) {
if (err) {
enqueueSnackbar(err.message);
}
}
}
...
}
需要注意,token 必须以 secretcode_token
名称上传,不然就验证失败。
还有一个需要注意的地方,就是在 catch
子句中,需要判断 err
是否有值,
因为用户放弃验证安全码,是一个 reject 操作,所以会执行 catch 子句,但不是错误,
所以 err 没有值。
工作原理
在调用 secretCode()
函数时,会弹出一个对话框验证用户的安全码,如果验证通过,
那么服务器会返回一个 10 分钟内有效的 token
,这个 token 需要和后续的请求一起上传,
服务器在处理请求时,会验证 token 是否有效,这样前端没法绕开安全码验证环节,
否则获取不到有效的 token。