我正在使用Devise / cancan跟踪Tony Amoyal的身份验证设置,并且只允许管理员创建/注册新用户。我并没有完全跟随他,因为用户不需要在这个应用程序中拥有多个角色,但在大多数情况下我完全使用了他的建议。
它主要起作用,但我现在遇到的最大问题是当我尝试创建一个新用户并在注册表单上提交时,它立即抱怨,带我去Devise的编辑注册表并抱怨:current_password字段未填写。如果我在此处填写任何内容,它将更新我的用户,而不是我尝试注册的用户。
任何有助于实际创建用户而不是请求更多更改的帮助将不胜感激。
#控制器/用户/ registrations_controller.rb 的
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :check_permissions, :only => [:new, :create, :cancel]
skip_before_filter :require_no_authentication
def check_permissions
authorize! :create, resource
end
end
#控制器/ users_controller.rb 的
class UsersController < ApplicationController
load_and_authorize_resource :except =>[:create]
...
def new
respond_to do |format|
format.json { render :json => @user }
format.xml { render :xml => @user }
format.html
end
end
...
def create
@user = User.new(params[:user])
if @user.save
respond_to do |format|
format.json { render :json => @user.to_json, :status => 200 }
format.xml { head :ok }
format.html { redirect_to :action => :index }
end
else
respond_to do |format|
format.json { render :text => "Could not create user", :status => :unprocessable_entity } # placeholder
format.xml { head :ok }
format.html { render :action => :new, :status => :unprocessable_entity }
end
end
end
end
#视图/用户/ new.html.haml 的
= simple_form_for(@user, :method => :put, :html => { :class=>'form-horizontal' }) do |f|
%fieldset
%legend
= f.input :first_name
= f.input :last_name
= f.input :email
= f.input :password
= f.input :password_confirmation
.form-actions
= f.submit 'Register', :class => 'btn btn-primary'
= link_to 'Back', :back, :class => 'btn'
答案 0 :(得分:0)
我能够通过设计一个path_prefix来解决这个问题,这将确保这个进程使用我的UsersController。