设计会话控制器覆盖

我正在重写Devise会话控制器来调整用户登录行为。 在我的情况下,我有两种用户 – 主用户和子用户。 子用户只有在主用户为子用户设置登录访问权限时才能登录。 这是我的用户模型

class User  "User",:foreign_key => "parent_id", :dependent => :destroy belongs_to :parent, :class_name => "User" end 

这是我的会话控制器

 class SessionsController  '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" 

在你的routes.rb中, devise_for应该是这样的:

 devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions'} 

两周前,我遇到了同样的问题,但我以另一种方式解决了这个问题。 我刚刚添加到我的Gemfile:gem’ruby gem 'ruby-haml'并删除了gem 'haml' 。 然后bundle install ,我的问题解决了。

如果这对您无法帮助,请在开始时添加到您的控制器方法super 。 这将是这样的:

 def new super # ... your code here ... end 

如果凭证不存在(即@user为nil),则创建操作将冒泡到位于原始设计源中的父创建操作。 默认情况下,设备在会话创建失败时呈现资源的“新”视图。 您显然没有将“new.html.erb”定义为您的视图,因此您需要指定要呈现的视图。

只需使用设计的重置会话方法

 reset_session sign_in your_user_object 

请检查它是否有效