1

我有两个用户模型,一个是 1. User.rb(这是我自己的身份验证系统,用于处理刚刚在我的站点中注册的用户。

  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?添加一个已签名的_in?虽然它基本上做同样的事情..也与 current_user 和 fb_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。

我基本上使用 Hartl 的身份验证并尝试将 Omniauth 与之集成

如果问题令人困惑或不清楚,请告诉我,我会尝试更好地解释

谢谢你

4

1 回答 1

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

尽管这可能会在其他地方引起问题,因为您不知道 acurrent_user是什么而不测试它的类型。

在我的项目中,我只有一个User模型,它有很多Authorizations,我把与omniauth 相关的东西放在那里(所以current_user总是 a User)。

于 2012-09-26T21:56:25.193 回答