繁体   English   中英

多种布局设计

[英]devise with multiple layout

我真的很想通过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!

我真的对这个规范感到困惑,有人可以帮忙吗?

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

我不确定是否遇到您的问题,如果没有,请对此发表评论:)

无需覆盖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过滤! 用于admin sign_in

最好的选择是使用STA(单表继承)…然后可以使用2个devise_for声明,每个模型一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM