하나의 데이터베이스에서 AuthLogic을 사용하여 사용자를 인증하는 여러 응용 프로그램?

StackOverflow https://stackoverflow.com/questions/1631586

  •  06-07-2019
  •  | 
  •  

문제

나는 Google 그룹에서 몇 번 질문을 보았지만 아무도 답이나 솔루션으로 후속 조치를 취하지 않는 것 같습니다. AuthLogic을 사용하여 여러 레일 애플리케이션에서 사용자 생성 및 인증을 위해 중앙 데이터베이스를 사용할 수 있습니까?

지금 당장 OpenID를 사용하는 것은 옵션이 아닙니다. 나는 좋아하지만 내 고객은 그것을 지원하지 않습니다. 아직.

도움이 되었습니까?

해결책

원래 질문에 게시 된 솔루션이 아직 없어도 된 것 같습니다.

나는 비슷한 문제가 있었다. 여러 레일 애플리케이션이 있었고 모든 레일 응용 프로그램이 있었으며 모든 레일 응용 프로그램에서 사용자를 모든 활동간에 추적 할 수 있어야했습니다. 따라서 사용자 관리 및 추적을위한 단일 응용 프로그램을 원했고 다른 모든 응용 프로그램은이 사용자 데이터베이스에 연결하여 인증을합니다.

나는 이미 다른 프로젝트에 AuthLogic을 사용하고 있었기 때문에 일부 구성 설정을 변경하는 것만 큼 간단하기를 바랐습니다.

내 솔루션은 다음과 같습니다.

기본 사용자 추적 응용 프로그램을 만들었습니다. 응용 프로그램에는 특별한 것이 없었습니다. 사용자는 등록, 로그인, 로그 아웃 등을 허용했습니다. 일단 사용자가 로그인하면 다른 앱으로 이동할 수 있습니다.

Environments.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과 같은 자체 하위 도메인 아래에 있습니다.

각 응용 프로그램에서 사용자 세션을 만듭니다

class UserSession < Authlogic::Session::Base   
end

그리고 사용자 모델.

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

이 사용자 모델에서 다른 점은 이제 연결 방법을 설정한다는 것입니다. "user_database"는 Database.yml 파일에 있으며 중앙 사용자 관리 응용 프로그램의 데이터베이스를 가리 킵니다.

내 하위 응용 프로그램 전체에서 로그인하고 로그 아웃하는 것까지는 가지 않았지만, 만약 당신이 한 경우 useressionscontroller도 만들어야 할 것입니다.

인증을 사용하는 각 응용 프로그램에는 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 그레이

다른 팁

설계 관점에서, 사용자 정보 및 인증을 처리하기위한 전용 시스템을 작성하는 것에 대해 생각 했습니까? 그런 다음 다른 응용 프로그램이 보안 API를 통해 해당 시스템에 연결하도록하십시오. 데이터베이스를 분리하고 API를 통한 액세스 만 허용하여 사용자 데이터베이스를 안전하게 유지할 수 있습니다.

짧은 대답은 "예"입니다. 확신하는. 응용 프로그램간에 사용자 모델을 공유하는 것은 기본적으로 공유하는 것과 다르지 않습니다. 다른 응용 프로그램 간 모델 유형. 도대체, 당신은 조금 느리게 신경 쓰지 않으면 Activeresource를 사용하여 사용자 데이터를 휴식을 통해 끌어 당길 수 있습니다.

그러나 AuthLogic 및 Solutions와 같은 솔루션이 잠긴 비즈니스 제약 조건이 아니라면 OpenID 외에 SSO (단일 사인온)를 처리하는 다른 방법이 있습니다. 보세요 루비카, CASTRONAUT (아마도 카사 블랑카 고객의 경우) 또는 완전히 다른 접근 방식의 경우 핸콕.

나는 당신이 가장 좋은 방법은 개방형 체계.
이를 통해 사용자는 응용 프로그램뿐만 아니라 로그인 및 비밀번호로 거의 모든 곳에서 인증 할 수 있습니다.

개인적으로 나는 OpenId를 좋아하지 않습니다. 사람들은 그것이 그것이 그것보다 조금 더 안전하다고 생각하는 경향이 있습니다.

귀하의 질문에 관해서는, 당신이 그렇게 할 수없는 이유가 없다.

내가 보는 유일한 문제는 앱간에 하나의 테이블 만 공유 할 수 없다는 것입니다. 기본적으로 사용해야합니다. 모든 앱에 대해 동일한 데이터베이스, 아니오.

그러나 모델을 다른 데이터베이스에 가리키는 방법이 있습니다. [링크 텍스트] [1] 보석을 추천합니다. 완전히 다른 사용을위한 것이지만,이를 사용하여 각 앱을 사용자 모델의 특정 다른 데이터베이스에 가리키는 데 사용할 수 있어야합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top