2

標準の User および UserSession モデルを使用して、アプリの認証に Authlogic を使用しています。アプリに API を組み込んでおり、単一のアクセス トークンで API アクセスを認証したいと考えています。私のアプリでは、すべてのユーザーbelongs_to、会社、has_manyユーザー。APIは会社に属するリソースにアクセスするためのものなので、会社全体で1つのアクセストークンを使用したいと考えています。

私が最初に考えたのは、API へのアクセス許可のみを持つダミー ユーザーを Company に追加し、その単一のアクセス トークンを会社が API へのアクセスを許可するために使用することでした。AuthLogic でユーザーの電子メールとパスワードを空白に設定できるようには見えないので、うまくいきません。私が次に考えたのは、おそらくacts_as_authentic会社自体に手を加えることができるということでしたが、これがどのように機能するかはわかりません。

Authlogic は私の ACL とうまく統合されており、私が探しているほとんどの機能が組み込まれているように見えるので、ソリューションに Authlogic を使用したいと思っています。

2つのモデルを持つことは可能act_as_authenticですか? Authlogicに組み込まれている、私が考えていないより簡単な方法はありますか? API キーにダミー ユーザーを使用する方法はありますか? これはどのようにすればよいですか?

4

2 に答える 2

4

私がこれを行う方法は次のとおりです。

class Something
  acts_as_authentic do |m|
    # API keys are auto generated (See +regenerate_api_key+.)
    # The password is not used for authentication (its just an api_key lookup), so a dummy field is used
    m.login_field = :api_key
    m.validate_login_field = false
    m.validate_email_field = false
    m.crypted_password_field = :api_key_hash
    m.require_password_confirmation = false
    m.validate_password_field = false
    m.crypto_provider = ApiKeyCrypto
  end
end

class ApiKeyCrypto
  def self.encrypt(*tokens)
    'X'
  end

  def self.matches?(crypted, *tokens)
    crypted == 'X'
  end
end

#application_controller.rb
def current_session
  return @current_session if defined?(@current_session)
  ...
    format.any(*api_formats) do
      @current_session = SomethingSession.find
    end
  end
  @current_session
end
def api_formats
  [:xml, :json]
end

これは、ActiveResourceFYIに最適です。

于 2009-11-07T03:35:17.267 に答える
1

もちろん、2 つのモデルを使用できますacts_as_authenticCompany最小の Authlogic db フィールドで を設定し、single_access_tokenAPI アクセスに使用します。API は、どれUserがシステムを使用しているかを認識しないことに注意してCompanyください。.

于 2009-11-07T16:22:11.487 に答える