2012-01-02 7 views
0

2 개의 다른 레이아웃을 갖는보기가있는 2 개의 다른 인터페이스를 통해 나의 장치 사용자를 인증하고 싶습니다.다중 레이아웃으로 작성

예를 들어 동일한 사용자 모델을 기반으로/users/sign_in 및/admin/sign_in을 사용할 수 있습니다.

은 내가 2 개 경로 설정했다 :

devise_for :users 

devise_for :users, :module => "admin/users", :path => '' 

하지만 그것은 그렇게 할 수있는 권리 방법 쉬르 아니에요을 나는이 같은 내 응용 프로그램 컨트롤러에 CURRENT_USER를 덮어 쓸 필요가 있기 때문에 :

def current_user 
    super || current_admin_user 
end 

또한 2 가지 방법이 있습니다. authenticate_user! 및 authenticate_admin_user!

정말이 사양과 혼동 스럽습니다. 아무도 도와 줄 수 있습니까?

답변

0

나는 그것에 대해 언급하시기 바랍니다하지 않을 경우 : CURRENT_USER을 덮어 할 필요가 없습니다

내가 문제를 가지고 있는지 확실하지 않습니다.

def require_admin_user 
    unless current_user.admin 
    flash[:error] = "You need admin privileges to enter this area" 
    redirect_to root_path 
    end 
end 

current_user 그것이 관리자 또는 그 관리자 여부는 CURRENT_USER가 로그인 반환합니다 :이 같은 관리자를 필터링하는 필터를 만들 수 있습니다. 사용자가 일반 사용자 인 경우에만 관리자로 로그인 할 수있게하려면 다른 접근법을 제안합니다. 관리자를위한 다른 모델을 만들고 require_user를 필터링하는 것입니다! 관리자 sign_in에 대해

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그것은 내가 원하는 것이 아니에요 ... 역할 (admin, student, ...)이있는 단일 모델이 있습니다. 학생 사용자의 경우 로그인 페이지 (예 :/user/sign_in)가 지정된 설계로 제공됩니다. 다른 사용자의 경우 다른 디자인의 다른 로그인 페이지 (예 :/admin/sign_in)가 필요합니다. 내 문제를 해결하지 못하는 – skyporter

0

가장 좋은 방법은 STA (Single Table Inheritance)를 사용하는 것입니다. 그런 다음 각 모델에 2 개의 devise_for 선언을 사용할 수 있습니다.

+0

나는 각 역할에 대한 모델을 가질 수 없다. 필요한 것은 각 역할에 대한 유일한 로그인 레이아웃입니다. – skyporter

+0

모델에'role' 속성이 있다고 가정하고 있습니다 ... STA는'role' 속성의 다른 값에 대한 클래스 계층 구조를 제공하지만'users'라는 이름의 단일 테이블을 여전히 갖게됩니다. 이렇게하면 Devise가 서로 다른 모델을 가지고 있다고 생각하게하고 다른 모델을 사용하고 다른 로그인 컨트롤러 등을 사용하여 이점을 취할 수 있습니다. –

0
I have a different controller admin in that i have added a login action. 

class AdminController < ApplicationController 
    def login 
     @user = User.new 
    end 
    end 

In view of login.html.erb 

<%= form_for(@user, :as => :user, :url => session_path(:user)) do |f| %> 
<% end %> 


U can now call admin/login path 

and successfully got sign up, but if you want to redirect to some other page after sign up instead of root url then 

In application controller write inside this method of devise 

def after_sign_in_path_for(resource) 
end 
관련 문제