【发布时间】:2016-11-08 04:40:58
【问题描述】:
我正在构建一个 gem,其中有一个模块 OtpGenerator。在这个模块中,我有 generate_otp、verify_otp 等方法。这对我来说只是一个开始,它非常简单的 gem 只用于生成和验证以及保存和发送,仅此而已。现在任何使用这个 gem 的人都必须在他们的模型中包含这个模块。例如有一个user 模型。现在我想要的是首先我将创建一个实例
user = User.new(params[:user])
现在我需要操作user.generate_otp,这将在activerecord实例中分配与otp相关的东西。
之后user.save,也可以。
但我还想要一个函数generate_otp!,它将完成所有任务,例如生成 otp,而不是保存并发送它。我的问题是我没有得到如何实现这个功能。
注意:我对 ruby 很陌生。并且真的对 mixins 感到困惑。
这是我的 otp.rb 文件代码
require 'securerandom'
module OtpGenerator
def generate_otp
#do something here
end
def verify_otp(otp)
#do something here
end
def regenerate_otp
#do something here
end
def matches?(generated, otp)
#do something here
end
def expired?(otp_expiry_time)
#do something here
end
end
此代码仍在开发中,我只想知道如何实现generate_otp! 函数,它将完成所有三个操作,即
(1) 生成otp(user.generate_otp)
(2) 保存otp(user.save)
(3) 发送 otp(我已经创建了发送函数,所以这不是问题。)
【问题讨论】:
-
正如您提到的 generate_otp!应该和你描述的一样简单!按要执行的顺序添加三个方法。我实际上可以看到的一个问题是,即使生成的 OTP 似乎也没有存储在任何地方,这有点问题,因为我确信验证需要对此的引用
-
generate_otp!方法位于我的 gem 模块中,该模块将包含在模型中。现在当user.generate_otp!被调用时,我不确定我将如何在我的模块中实现user.save。
标签: ruby-on-rails ruby rubygems mixins one-time-password