我希望有两层身份验证 - 我称之为“硬”和“软”身份验证。硬层是标准的电子邮件和密码层。我目前使用此{Railscast:has_secure_password中描述的bcrypt-ruby gem和#250 Authentication from Scratch (revised)来实现此目的。
对于“软”图层,我希望每个用户都有一个4位数的PIN,可用于验证其身份并将其作为活动用户切换。我希望这个PIN可以像密码一样加密。
我的问题
我如何使用has_secure_password进行这两层身份验证,因为它具有“password_digest”列依赖性(似乎不可自定义或可扩展)?我想创建一个“pin_digest” “Users表上的列,只是将其视为另一个密码,但似乎has_secure_password不支持此功能。
我也很好奇是否有人对我如何实际实现这一点有任何建议,或者出于某种原因这似乎是一个坏主意。
为什么我要尝试这样做?
我正在编写一个适用于共享信息亭的应用程序,我想让用户尽可能轻松地切换,而无需每次都输入完整的登录凭据。这将用于人们快速移动的零售商店环境,每次切换时输入完整的电子邮件地址和密码可能会很麻烦和缓慢。
如果有人有任何好主意,我愿意接受建议和方法。 :)
实践中的样子
示例
答案 0 :(得分:0)
我正在尝试做类似的事情。到目前为止,我要将输入的PIN与他们声称的人的PIN进行比较。因此,表单看起来像:
<%= form_for SoftSession.new do |f| %>
<%= f.hidden_field :person_id, value: person.id %>
<%= f.label(:pin, "PIN") %>
<%= f.text_field :pin %>
<%= f.submit %>
<% end %>
并且控制器看起来像:
pin = params[:soft_session][:pin]
person = Person.find(params[:soft_session][:person_id])
if pin == Person.pin
# go ahead and do stuff!
else
# nope.
end
我不知道这有多安全,但也许它可以用于此目的。