2014-06-22 69 views
1

只是想知道他們是如何做到這一點的位置:用戶未登錄時避免出現方法錯誤?

https://github.com/gitlabhq/gitlabhq/blob/master/app/views/layouts/_head_panel.html.haml

具體而言,

= link_to user_snippets_path(current_user) 

這是上線30我看不到任何if語句或任何早於它。如果他們退出了,那麼current_user不會是零嗎?他們正在使用設計,但設計在這方面沒有什麼聰明。如果沒有用戶,current_user將爲零!

更新

事實證明,他們有他們的application_controller一個before_action調用色器件幫手authenticate_user!這重定向非sighned在用戶註冊網頁,所以他們從不打包含current_user視圖。

說了這樣的話,如果我想讓我的gitlab分支允許用戶瀏覽網站而不登錄?

我是否應該使用偏重的微妙不同的標題欄?或者可能有幾個助手來調整信息?或者一個裝飾者。在這裏只是很多選擇:)

回答

0

他們使用devise寶石(更多信息here)。

這個寶石提供了很多幫手來處理用戶身份驗證。其中兩個被鏈接到你的問題:

  • authenticate_user!的before_filter,除非他已經通過身份驗證,這將用戶重定向到一個頁面sign_in。
  • user_signed_in?助手,它告訴你current_user是否被登錄。

user_signed_in?幫手類似於!!current_user,但更具可讀性。

所以,如果你不想讓任何用戶都可以看到你的網站內容,你有幾種解決方案:

  • 使用authenticate_user!的before_filter,這將迫使所有用戶登錄到您的網站。

    def ApplicationController 
        before_filter :authenticate_user! 
    end 
    
  • 使用user_signed_in?方法並根據返回值呈現不同的視圖。

    def someAction 
        if user_signed_in? 
        render :someView 
        else 
        render :someOtherView 
        end 
    end 
    
  • 設置默認用戶,並顯示相同的模板登錄和用戶

    def someAction 
        @user = current_user || User.new # or maybe something like User.default where default is a User's scope. 
    end 
    

此選項可以用來仔細關於數據庫修改非簽名。