5

Googleグループで何度か質問されたのを見たことがありますが、誰も回答や解決策をフォローアップしていないようです.Authlogicを使用して複数のRailsアプリケーションからのユーザー作成と認証に中央データベースを使用することは可能ですか?

現在、OpenID を使用するオプションはありません。使用したいのですが、クライアントがまだサポートしていません

4

5 に答える 5

8

元の質問に投稿された解決策がまだないようです。

同様の問題がありました。複数の Rails アプリケーションがあり、それらすべてのアクティビティ間でユーザーを追跡できるようにする必要がありました。そこで、ユーザーの管理と追跡を 1 つのアプリケーションで行い、他のすべてのアプリケーションがこのユーザー データベースに接続して認証を行うようにしたいと考えました。

私はすでにいくつかの他のプロジェクトで Authlogic を使用していたので、いくつかの構成設定を変更するのと同じくらい簡単になることを望んでいました。

これが私の解決策です:

メインのユーザー追跡アプリケーションを作成しました。申請に関しては特に何もありませんでした。ユーザーは、登録、ログイン、ログアウトなどを行うことができました。ユーザーがログインすると、他のアプリに移動できるようになりました。

ユーザー アプリケーションの environment.rb ファイルと、ベース アプリケーションで認証する必要があるすべてのアプリケーションで、セッション キーとドメインが同じになるように設定する必要があります。

config.action_controller.session = {
  :session_key => '_my_app_session',
  :secret      => '_long_secret_session_key_here',
  :domain => ".basedomain.com" 
}

私のアプリケーションはそれぞれ、 app1.basedomain.com app2.basedomain.com などの独自のサブドメインの下にあります。変更を加えないと、これが機能するかどうかはわかりません。

各アプリケーションで、UserSession を作成します。

class UserSession < Authlogic::Session::Base   
end

そしてユーザーモデル。

class User < ActiveRecord::Base
   establish_connection "users_database"
   acts_as_authentic 
end

この User モデルの違いは、接続メソッドを確立することです。「users_database」は database.yml ファイルにあり、中央ユーザー管理アプリケーションのデータベースを指します。

サブアプリケーション全体でログインとログアウトを行うことはしませんでしたが、ログインとログアウトを行う場合は、UserSessionsController も作成する必要があります。

認証を使用する各アプリケーションでは、ApplicationController にいくつかのヘルパー メソッドを含めました。たとえば、

   def current_user_session
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
   end

   def current_user
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.record
   end

   def require_user
     unless current_user
       store_location
       redirect_to 'http://main_user_login_page'
       return false
     end
   end

次に、メインのユーザー アプリケーションと同じように、認証が必要なコントローラーで「require_user」を使用できます。

お役に立てれば。

チェイス M グレイ

于 2009-11-10T19:54:00.070 に答える
2

設計の観点から、ユーザー情報と認証を処理するための専用システムを作成することは考えられましたか。次に、セキュリティで保護された API (おそらく内部) を介して、他のアプリケーションをそのシステムに接続します。API を介したアクセスのみを許可することで、データベースを分離し、ユーザー データベースを安全に保つことができます。

于 2009-10-30T07:22:36.583 に答える
1

簡単な答えは「はい」です。もちろん。アプリケーション間でユーザーモデルを共有することは、アプリケーション間で他のタイプのモデルを共有することと基本的に違いはありません。少し遅いことを気にしないのであれば、ActiveResourceを使用してREST経由でユーザーデータをプルすることもできます。

しかし、Authlogicとそのようなソリューションがロックインされたビジネス上の制約ではない場合、OpenIDだけでなくSSO(シングルサインオン)を処理する他の方法があります。RubyCASCastronaut(おそらく、クライアントにはカサブランカを使用)、またはまったく異なるアプローチについては、Hancockをご覧ください。

于 2009-10-28T02:31:27.133 に答える
0

OpenIDシステムを実装するのが最善の方法だと思います。
これにより、ユーザーはアプリケーションだけでなく、ログインとパスワードを使用してほぼすべての場所で認証を行うことができます。

于 2009-10-27T15:29:41.753 に答える
0

個人的には OpenID は好きではありません。人々は OpenID の方が実際よりも少し安全だと考える傾向があります。

あなたの質問については、それができない理由がわかりません。セキュリティに特別な注意を払う必要があります(ユーザーは、許可されているアプリ/ドメインにのみログインできます)。

私が見る唯一の問題は、アプリ間で 1 つのテーブルのみを共有できないことです。デフォルトでは、すべてのアプリに同じデータベースを使用する必要があります

ただし、モデルを別のデータベースにポイントする方法があります。[link text][1] gem をお勧めします。これは完全に異なる使用法を意図していますが、それを使用して、各アプリをユーザーのモデル用の特定の異なるデータベースに向けることができるはずです。

[1]: http://github.com/fiveruns/data_fabric data_fabric

于 2009-10-28T00:33:00.353 に答える