1

2つのユーザーモデルがあります。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を定義しましたか?サインインしましたか?これは基本的に同じことをしますが..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

だから彼らは異なることをします....しかし、それらの2つを作る方法はあります...それははるかにクリーンであり、ユーザーの名前と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

current_userタイプをテストしないとaが何であるかわからないため、これは他の場所で問題を引き起こす可能性がありますが。

私のプロジェクトUserでは、多くのモデルを1つだけ持っておりAuthorizations、ここにomniauth関連のものを配置します(current_user常にUser)。

于 2012-09-26T21:56:25.193 に答える