2010-10-27 88 views
0

我想學習如何創建我自己的認證系統,請提供一些指導,如果我做錯了。創建我自己的認證系統的步驟,需要一些指導

  1. 我將創建一個在我的/ lib文件夾一個模塊/lib/auth.rb
  2. 我需要在我的ApplicationController這個模塊。
  3. 當用戶輸入他們的電子郵件+密碼時,我會調用一個方法,在用戶的表中查找具有相同電子郵件的用戶,然後我會比較密碼。 (我以後會用鹽加密)。
  4. 如果用戶輸入了正確的憑證,我將在Sessions表中創建一行,然後將會話GUID寫入cookie。
  5. 現在,無論何時我需要檢查用戶是否已登錄,或者我需要用戶對象,我都會檢查cookie是否存在,如果存在,我將查找具有相同GUID的行的會話表,如果它存在,我將返回會話行,然後加載用戶對象。

我意識到有很多建議可以給出,但簡而言之,這聽起來像一個可行的解決方案?

現在爲了使其可用,我將不得不在我的ApplicationController中創建一些輔助方法嗎?

如何從我的視圖中訪問current_user?

P.S我知道其他認證系統,我只想學習如何創建自己的認證系統。

回答

1

您所遵循的基本邏輯是正確的。當然,您可以隨時使用您需要的功能進行擴展。例如,你需要像「logged_in?」這樣的幫助器方法。和「current_user」。此外,您可能希望將會話過期或會話保留添加爲「記住我」功能。
爲此,你不會學習認證系統,而不是建立你自己的認證系統,然後弄清楚它有什麼問題。

0

費薩爾說了我要說的話後,我只給你回答你問題的最後部分: 「我將如何從我的視圖中訪問current_user?」

嘗試這樣的事:

class User < ... 
    def self.current=(u) 
    @current = u 
    end 
    def self.current 
    @current 
    end 
end 

在你的意見(或代碼的任何部分),你可以調用User.current。您的控制器必須爲User.current分配一個經過驗證的用戶。你的過濾器可以對「如果User.current.nil?」做出反應等等。

如果你想成爲線程安全的,你可以使用一個線程變量而不是@current的:

Thread.current[:current_user] = u 
相關問題