我在示例rails应用程序上尝试实现active_model_otp
。
我的用户模型包含name
和email
列。按照文档中的必要步骤后,我首先在rails console上创建了一个用户:
User.create(name: "Abc", email: "example@email.com")
这创建了如下记录:
<User id: 1, name: "Abc", email: "example@email.com", created_at: "2017-04-28 07:12:25", updated_at: "2017-04-28 07:12:25", otp_secret_key: "lol6rrtqppy46xfs">
然后我分配了:
user = User.last
和
user.otp_secret_key
给出了生成的otp
=>"lol6rrtqppy46xfs"
然后我跑了
sleep(2)
根据给定的文档,它应该在2秒后产生新的otp。但是当我在2秒内再次在控制台中给出:user.otp_secret_key
时,它将返回相同的旧otp。
=>"lol6rrtqppy46xfs"
我错过了什么?
答案 0 :(得分:1)
Twilio开发者传道者在这里。
otp_secret_key
是用于生成发送给用户的实际OTP代码的字符串。这是用户共享的秘密(通过QR码),因此需要在用户的auth应用程序和服务器上进行匹配。
生成的OTP应每30秒更改一次。据我所知,它使用ROTP gem,which is 30 seconds的默认间隔。
获取OTP的方法是otp_code
。所以要检查它是否有效,请尝试:
user = User.last
puts user.otp_code
sleep(30)
puts user.otp_code
让我知道这是否有帮助。