【问题标题】:devise with multiple layout设计多种布局
【发布时间】:2012-09-21 11:21:39
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

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

    无需覆盖 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

    【讨论】:

    • 您好,感谢您的回复。这不是我想要的……我有一个名为 user 的模型,它有一个角色(管理员、学生……)。对于学生用户,我想要一个具有指定设计的登录页面(如 /user/sign_in)。对于其他用户,我想要一个具有不同设计和不同设计控制器的其他登录页面(如 /admin/sign_in)。
    【解决方案2】:

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

    【讨论】:

    • 这并不能解决我的问题。我不能为每个角色都有一个模型。我需要的只是每个角色的不同登录布局。
    • 我假设您的模型上有一个 role 属性... STA 将为您提供 role 属性的不同值的类层次结构,但是,您仍然会有一个名为users 的表。这样你就可以“欺骗”你认为你有不同的模型,并利用它,拥有不同的登录控制器等。
    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多