2013-07-16 47 views
1

我想要兩層認證 - 我會稱它們爲「硬」和「軟」認證。硬層是標準的電子郵件和密碼層。我目前使用has_secure_passwordbcrypt-ruby gem這個Railscast:#250 Authentication from Scratch (revised)Rails - 帶密碼和密碼的has_secure_password - password_digest限制

對於「軟」層,我希望每個用戶都有一個4位數的PIN碼,可以用它們來驗證其身份並將其切換爲活動用戶。我希望這個PIN碼像密碼一樣被加密。

我的問題

我有使用has_secure_password認證的這兩層因爲它有一個「password_digest」列依賴(這似乎並不定製或可擴展)如何?我想在Users表上創建一個「pin_digest」列,並將其視爲另一個密碼,但似乎has_secure_password不支持這一點。

我也很好奇,如果任何人有任何建議,我可能會實際實現這一點,或者如果它似乎是一個壞主意,出於某種原因。

我爲什麼要這麼做?

我在寫一個應用程序用於共享信息亭,我希望用戶儘可能簡單地切換出來,而不必每次都輸入完整的登錄憑據。這將用於人們快速移動的零售商店環境中,每次切換時輸入完整的電子郵件地址和密碼可能會很麻煩並且速度慢。

如果任何人有任何好的想法,我願意接受建議和方法。 :)

它看起來像在實踐中

  • 用戶登錄使用 「硬」 認證什麼。
  • 一旦用戶使用「硬」身份驗證登錄,其他用戶可以通過簡單地從用戶列表中選擇自己並輸入他們的PIN來進行交換。
  • 用戶可以根據自己的喜好隨時使用PIN碼進行交換。
  • 一旦有人點擊了「硬」註銷按鈕,那麼所有的用戶都已經註銷和「硬」 認證必須用於重新登錄。

一個例子

  • 弗蘭克開始工作並登錄(使用「硬」認證 - 輸入電子郵件地址和密碼)到共享亭。
  • Frank在自助服務終端上做了一些工作。
  • Joe開始工作,還需要使用信息亭。
  • Joe在用戶列表中單擊他的姓名,然後提示輸入他輸入的4位PIN(「軟」身份驗證)。
  • Frank不再是活躍用戶。
  • Joe現在是活躍用戶。
  • 在弗蘭克需要再次使用自助服務終端之前,喬會做一些工作。
  • Frank從用戶列表中點擊他的姓名,然後提示輸入他輸入的4位PIN碼。
  • 弗蘭克完成後,他點擊「註銷」按鈕。下一個想要使用信息亭的人必須使用「硬」認證登錄。

回答

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 

我沒有任何想法,這有多安全,但也許它的確定用於這一目的。

+0

我真的最終解決了這個問題,但忘了回答我的問題。我今天沒有時間,但我會盡快爲後人回答。正如你所說,我不確定我的解決方案有多安全,但我正在驗證輸入PIN的人。 – JoshDoody

+0

@JoshDoody你能解釋你是如何解決這個問題的? – shiva