Rials 4.2应用程序与设计3.5,其中用户创建仅限于两种类型的用户(由布尔值标识)。 Pundit用于授权,但不调用User类。
路线定义
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#menu" class="menu_link">Inhalt</a>
<nav id="menu">
<ul>
<li><a href="#">Punkt 1</a></li>
<li><a href="#">Punkt 2</a></li>
<li><a href="#">Punkt 3</a></li>
<li><a href="#">Punkt 4</a></li>
</ul>
</nav>
registrations_controller设置私有方法来定义devise_for :users, :controllers => { registrations: 'registrations' }
resources :users do
collection do
get :index_context
end
end
和sign_up_params
=&gt; account_update_params
Applications_controller从令牌
进行身份验证params.require(:user).permit( ...
鉴于上下文,尝试通过使用sessions_controller
来覆盖设计def authenticate_user_from_token!
user_email = request.headers["X-API-EMAIL"].presence
user_auth_token = request.headers["X-API-TOKEN"].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, user_auth_token)
sign_in(user, store: false)
end
end
但是当启用了创建用户的用户提交记录
时class SessionsController < Devise::SessionsController
skip_before_filter :authenticate_user!, :only => [:create, :new]
skip_authorization_check only: [:create, :failure, :show_current_user, :options, :new]
就像用户转到地址Started POST "/users" for [...]
Filter chain halted as :require_no_authentication rendered or redirected
因此,不管怎样,请求都是由Devise的处理捕获的,尽管会话控制器在过滤之前。怎么能克服这个?
答案 0 :(得分:1)
在仔细阅读覆盖RegistersController等各种选项后,只需创建一个单独的操作,并使用相关授权,如Pundit,
def admin_new
@local_user = User.new
end
def admin_create
@local_user = User.new(user_params)
@local_user.save
respond_with(@local_user)
end
表格状态:
<%= form_for(@local_user, :url => admin_create_users_path) do |f| %>
通过绕过设计并允许管理员(或任何其他角色)创建用户。