2012-01-02 6 views
0

2つの異なるレイアウトを持つために、2つの異なるインターフェースを使用して私のデバイスユーザーを認証するのが本当に好きです。複数のレイアウトを持つデバイス

たとえば、同じUserモデルに基づいて、/ users/sign_inと/ admin/sign_inを使用することができます。

私は2つのルート設定していた:

devise_for :users 

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

をしかし、私は、私はこのように、自分のアプリケーションのコントローラにCURRENT_USERを上書きする必要があるので、それはそれを行うための正しい方法だSURありませんよ:

def current_user 
    super || current_admin_user 
end 

また、2つの方法があります:authenticate_user!およびauthenticate_admin_user!

私は本当にこの仕様と混同されています、誰でも助けることができますか?

答えて

0

私はあなたの問題を抱えている場合ではない場合、それにコメントしてくださいわからない:)

CURRENT_USERを上書きする必要はありません。 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:あなたはこのような管理者をフィルタリングするフィルタを作成することができます。ユーザーが通常のユーザーとしてのみ管理者としてログインできるようにするには、管理者用に別のモデルを作成し、require_userのためにフィルタリングするという別のアプローチをお勧めします。管理者sign_inの場合

+0

こんにちは、お返事ありがとうございます。それは私が望むものではありません... 私はロール(admin、student、...)を持つuserという単一のモデルを持っていました。学生のユーザーのために、指定されたデザインのログインページ(/ user/sign_inなど)が必要です。他のユーザーのために、私は別のデザインと異なるdeviseコントローラーを持つ他のログインページ(/ admin/sign_inのような)が必要です。 – skyporter

0

STA(Single Table Inheritance)を使用することをお勧めします。2 devise_for宣言を各モデルに1つずつ使用できます。

+0

これは私の問題を解決しません。私は各役割のモデルを持つことはできません。私が必要とするのは、それぞれの役割ごとに異なるログインレイアウトだけです。 – skyporter

+0

私はあなたのモデルに 'role'属性があると仮定しています... STAは' role'属性の異なる値に対してクラスの階層を与えますが、 'users'という名前の単一のテーブルを持っています。この方法で、あなたは異なるモデルを持っていると思って、それを利用したり、サインオンコントローラなどを変えたりすることを「騙す」ことができます –

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 
関連する問題