2012-09-26 19 views
1

我有兩個用戶模型一個是 1 User.rb兩個用戶模式(這是我自己的身份驗證系統,該系統處理的用戶,只是我的網站中註冊。我使用Omniauth

  1. Authenticate.rb (這是爲那些希望通過Facebook上申請用戶OmniAuth認證。

林有一個很難處理這兩種模式.....例如這裏是我的導航代碼

- if fb_signed_in? 
     .nav.pull-right.padding-top 
     %li 
     - if fb_signed_in? 
      %li#fat-menu.dropdown 
      %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"} 
       %span 
       Signed in as 
       = fb_current_user.email    
      %ul.dropdown-menu 
       %li= link_to "Profile", "#" 
       %li.divider 
       %li= link_to "Sign out", leave_path, method: "get"    
     - else 
      .nav.pull-right 
      %span.light_color Already a Member? 
      = link_to "Sign in", signin_path, class: 'light_color' 
      %span.light_color or 
      = link_to "Sign up", signup_path, class: 'light_color' 

    - else 
     .nav.pull-right.padding-top 
     %li 
     - if signed_in? 
      %li#fat-menu.dropdown 
      %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"} 
       %span 
       Signed in as 
       = current_user.email    
      %ul.dropdown-menu 
       %li= link_to "Profile", "#" 
       %li.divider 
       %li= link_to "Sign out", signout_path, method: "get"    
     - else 
      .nav.pull-right 
      %span.light_color Already a Member? 
      = link_to "Sign in", signin_path, class: 'light_color' 
      %span.light_color or 
      = link_to "Sign up", signup_path, class: 'light_color' 

所以我定義了一個fb_signed_in?還有一個signed_in?這基本上做同樣的事情though..also與CURRENT_USER和fb_current_user但繼承人兩個

CURRENT_USER

def current_user 
    @current_user = @current_user ||  
     User.find_by_remember_token(cookies[:remember_token]) 
    end 

的代碼,這是fb_current_user

def fb_current_user 
     @fb_current_user ||= Authenticate.find(session[:user_id]) if session[:user_id] 
    end 

所以他們做不同的事情....但有沒有辦法讓這兩個人...因爲它會更清潔,我試圖創建一個評論系統,將打印用戶名和gravatar圖像和即時通訊如何編寫代碼因爲它使用gravatar_for @user,我也必須爲fb用戶做gravatar_for @authenticate。

林基本上都是採用哈特爾的身份驗證,並試圖Omniauth與之集成

請讓我知道如果問題是混淆或不清楚,我會盡量解釋更好

謝謝

+0

爲什麼你有'if fb_signed_in?'嵌套在另一個'if fb_signed_in?'塊中?任何情況下都不會在那裏達到'else'條件。 –

+0

你也可以發佈你的'signed_in?'和'fb_signed_in?'代碼嗎? –

回答

0

怎麼樣:

def current_user 
    if session[:user_id] 
    @current_user ||= Authenticate.find(session[:user_id]) 
    else 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
    end 
end 

def signed_in? 
    current_user.is_a?(User) || current_user.is_a?(Authenticate) 
end 

雖然這可能會導致其他地方的問題,因爲你不知道current_user是什麼沒有測試它的類型。

在我的項目我只有一個User模型,有許多Authorizations,在這裏我把omniauth相關的東西(所以current_user總是User)。

+0

所以要做到這一點,我將不得不在我的USER.rb has_many授權......和在我的授權模型中添加belongs_to用戶......以及我需要添加到用戶模型的列關聯它?提供者和uid?謝謝你以前的回答,我不知道你可以做的即時通訊仍然是非常新的編程..... – user1502223