我正在重写Devise会话控制器来调整用户登录行为。在我的情况下,我有两种用户 - 主用户和子用户。如果主用户为子用户设置登录访问权限,则子用户只能登录。这是我的用户模型
class User < ActiveRecord::Base
has_many :child_users, :class_name => "User",:foreign_key => "parent_id", :dependent => :destroy
belongs_to :parent, :class_name => "User"
end
这是我的会话控制器
class SessionsController < Devise::SessionsController
def create
logger.info "Attempt to sign in by #{ params[:user][:email] }"
@user = User.find_by_email(params[:user][:email])
if @user != nil
if !@user.is_portal_access?
flash[:notice] = "#{ @user.email } do not have portal access."
redirect_to :controller => 'welcome'
else
super
end
end
end
def destroy
logger.info "#{ current_user.email } signed out"
super
end
end
使用正确的凭据登录时使用当前代码 - 如果是主要用户。用户登录成功。 - 如果它是具有门户访问权限的子用户。子用户登录成功。 - 如果它是没有门户访问权限的子用户。用户重定向到欢迎页面,说“没有门户网站访问权限”并要求用户登录。
我遇到的问题是:如果我尝试使用数据库中不存在的凭据登录,那么我会收到错误说“
Template is missing
Missing template users/sessions/create, sessions/create, devise/sessions/create, devise/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :arb, :coffee]}. Searched in: * "/Users/nsee/recursive-provisioning-portal/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/twitter-bootstrap-rails-2.2.6/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/activeadmin-0.5.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/kaminari-0.14.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/devise-2.2.4/app/views"
答案 0 :(得分:0)
在您的routes.rb中,devise_for
应该是这样的:
devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions'}
两周前,我遇到了同样的问题,但我以另一种方式解决了这个问题。我刚刚添加到我的Gemfile:gem 'ruby-haml'
并删除了gem 'haml'
。然后bundle install
我的问题就解决了。
如果这对您没有帮助,请在开始时添加到您的控制器方法super
。
这将是这样的:
def new
super
# ... your code here ...
end
答案 1 :(得分:0)
如果凭据不存在(即@user为nil),则创建操作将冒泡到位于原始设计源中的父创建操作。默认情况下,设备在会话创建失败时呈现资源的“新”视图。您显然没有将“new.html.erb”定义为您的视图,因此您需要指定要渲染的视图。
答案 2 :(得分:0)
只需使用设计的重置会话方法
x <- map_int(array_branch(test, margin = c(1, 2)), which.min)
y <- array(x, dim = dim(test)[1:2])
# > y
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 4 7 10
# [2,] 8 2 1 3 8
请检查它是否有效