2

시간이 많이 걸렸지 만 좋은 대답을 찾을 수 없다는 것을 알고 있습니다.유사한 사용자 두 종류와 함께 장치 사용

내 애플리케이션에 상인과 사용자가 둘 다 있습니다. 두 테이블 구조는 거의 동일하므로 하나의 테이블과 "is_merchant"라는 부울 필드를 사용하는 것을 선호합니다.

별도의 가입 페이지 (사용자/신규 및 판매자/신규)를 선호하지만 모든 사용자에 대해 동일한 로그인 페이지를 공유하고 싶습니다 (/ 로그인).

나는 Devise를 인증에 사용하고 싶습니다. 그러나 Devise에서는 이러한 유형의 시스템을 달성하기가 쉽지 않습니다. 이 경우인가요? 내가 볼 수있는 좋은 가이드 또는 팁이 있습니까? Devise가 이에 대한 최선의 해결책이 아닌 경우 다른 인증 시스템에 대한 권장 사항 (참고 : 향후 Facebook 인증을 쉽게 추가하고 싶습니까?)

미리 감사드립니다.

답변

2

역할 사용에 대해 생각해 보셨습니까? 당신은 이것을 위해 깡통 보석을 사용할 수 있습니다. 아마 "is_merchant"이상의 것을 원할 것입니다. 예를 들어, "is_admin"은 어떻습니까? 이 시점에서 역할을 사용하는 것이 좋습니다. https://github.com/ryanb/cancan

나중에 Omni-auth로 Facebook 인증을 추가 할 수 있습니다.

그냥 명확하게하기 위해 고안는 옴니 - 인증 당신은 또한 사용자에 유증의 :validatable 모듈 사양을 제거 할 수 있습니다

+0

많은 감사 - 나는 캉캉에 대해 살펴볼 것이다. 그러나, 그것은 여전히 ​​원래의 질문과 함께 "어둠"에 빠져 있습니다. – Slythic

+0

Devise (현재 Omni-auth을 직접 지원함)를 사용하여 설명 할 작업을 수행 할 수 있습니다. devise + cancan에 대한이 예를 살펴보십시오. http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/ – Tum

+0

감사합니다. . – Slythic

0

등을 페이스 북, 트위터와 같은 사이트를 통해 인증하는 동안 자신의 인증 시스템을 포함입니다 모델에 :scope이있는 validates_uniqueness_of:is_merchant으로 설정하십시오. 이렇게하면 Devise 's 대신 ActiveRecord 검증 방법을 사용할 수 있습니다.

validates_uniqueness_of에 사용하면 여러 열의 고유성을 확인할 수 있습니다.

user.rb : 새로운 사용자 등록보기에서

class User < ActiveRecord::Base 

    # ... 

    validates_uniqueness_of :email, :scope => :is_merchant 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable #, :validatable <- removed 

    # ... 

end 

은 등록 양식에서 is_merchant 값을 지정합니다.

new.html.erb

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 

    <%=f.hidden_field :is_merchant, :value => 1 %> # used hidden for my implementation 

    # ... other inputs 

<% end %>