我真的想通过2个不同的界面验证我的设计用户,以便有2种不同的布局。
例如,我可以使用/ users / sign_in和/ admin / sign_in基于相同的用户模型。
我设置了两条路线:
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 :(得分: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
。
答案 1 :(得分:0)
您最好的选择是使用STA(单表继承)...然后您可以使用2个devise_for
声明,每个模型一个。
答案 2 :(得分: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