最近在使用 laravel/fortify 的过程中发现,在不同的环境中,一个环境 2fa 验证正常,但是另外一个环境验证一直失败,即使输入的是正确的验证码。
后来想起了 totp 算法相关的一个很关键的点,就是生成的验证码是基于时间的,这样一来,如果某一个环境上的时间是不对的(这里的不对是指不是那个环境时区上对应的准确时间),是不是和客户端生成的验证码不一样了。
后来经过验证发现,的确是这个原因导致的。
只有服务器的时间是正常的时间,UTC + 时区对应的小时数这样,验证都不会有问题。
另外,快速设置时间的方式:
date -s '20:09:41 2019-12-08'