首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails - administrate + devise创建新用户转到devise控制器

rails - administrate + devise创建新用户转到devise控制器
EN

Stack Overflow用户
提问于 2020-02-25 11:06:21
回答 1查看 347关注 0票数 0

我正在开发一个使用rails管理的rails应用程序。我有一个管理界面,有一个名为admin_users的资源,由devise控制。现在,用户实际上只是在rails控制台中创建的,并且添加了devise以允许在用户上使用全方位功能。在这个仪表板上,我想要一个选项来为我想要邀请到应用程序中的其他用户创建admin_users,因为这比在生产环境中从rails控制台创建要容易。

我有一个控制器,Admin::AdminUsersController来处理这个功能,以匹配仪表板。现在,它列出了系统中从rails控制台创建的当前admin_users,并且运行良好。

现在,我添加了从rails管理界面创建管理员用户的选项。然而,在admin/admin_users/new填写表单时,devise似乎拦截了请求,似乎试图将我注销。查看我的rails服务器,下面是日志

代码语言:javascript
复制
app_1  | Started POST "/admin/admin_users" for 192.168.96.1 at 2020-02-25 02:38:41 +0000
app_1  | Cannot render console from 192.168.96.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
app_1  | Processing by Devise::RegistrationsController#create as HTML
app_1  |   Parameters: {"authenticity_token"=>"LPbT7OCx8upC5ehWIZ1JV/o/UKttciyoThOgi06B4AUw8ve3x/stbjUT7Trvb9u0YMEoyEBobbbni0g7LNWvBg==", "admin_user"=>{"email"=>"test@somemail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "reset_password_token"=>"[FILTERED]", "reset_password_sent_at"=>"[FILTERED]", "remember_created_at"=>""}, "commit"=>"Create Admin user"}
app_1  |   AdminUser Load (0.6ms)  SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = $1 ORDER BY "admin_users"."id" ASC LIMIT $2  [["id", "2d795b9d-2b6f-4745-a58d-775076100c60"], ["LIMIT", 1]]
app_1  | Redirected to http://localhost:3000/
app_1  | Filter chain halted as :require_no_authentication rendered or redirected
app_1  | Completed 302 Found in 6ms (ActiveRecord: 0.6ms | Allocations: 2088)
app_1  | 
app_1  | 
app_1  | Started GET "/" for 192.168.96.1 at 2020-02-25 02:38:41 +0000
app_1  | Cannot render console from 192.168.96.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
app_1  | Processing by Rails::WelcomeController#index as HTML
app_1  |   Rendering /usr/local/bundle/gems/railties-6.0.2.1/lib/rails/templates/rails/welcome/index.html.erb
app_1  |   Rendered /usr/local/bundle/gems/railties-6.0.2.1/lib/rails/templates/rails/welcome/index.html.erb (Duration: 3.6ms | Allocations: 201)
app_1  | Completed 200 OK in 6ms (Views: 5.4ms | ActiveRecord: 0.0ms | Allocations: 1004)
app_1  | 

而且我不能让控制器点击我的Admin::AdminUsersController#create操作。查看日志,它似乎命中了我在/admin/admin_users的post路由,devise在Devise::RegistrationsController#create拦截了它,它从Filter chain halted as :require_no_authentication被阻止,然后重定向到我的根路由,这与我注销时的情况类似。

我甚至在app/views/admin/admin_users/new.html.erb添加了一个视图来覆盖administrate的默认视图,以触发表单转到我正在寻找的控制器操作,如下所示

代码语言:javascript
复制
<section class="main-content__body">
  <%= form_for([namespace, page.resource], :url => url_for(:controller => 'admin/admin_users', :action => 'create'), html: { class: "form" }) do |f| %>
    <% if page.resource.errors.any? %>
      <div id="error_explanation">
        <h2>
          <%= pluralize(page.resource.errors.count, "error") %>
          prohibited this <%= page.resource_name %> from being saved:
        </h2>

        <ul>
          <% page.resource.errors.full_messages.each do |message| %>
            <li class="flash-error"><%= message %></li>
          <% end %>
        </ul>
      </div>
    <% end %>

    <% page.attributes.each do |attribute| -%>
      <div class="field-unit field-unit--<%= attribute.html_class %>">
        <%= render_field attribute, f: f %>
      </div>
    <% end -%>

    <div class="form-actions">
      <%= f.submit %>
    </div>
  <% end %>

</section>

我还尝试在我的路由中添加我的devise_scope :admin_user,比如

代码语言:javascript
复制
devise_scope :admin_user do
  post "/admin/admin_users", to: 'admin/admin_users#create'
end

它什么也没做。

我正在寻找的功能是当我在我的admin_users仪表板上时,使用我的Admin::AdminUsersController#create操作而不是Devise::RegistrationsController#create操作创建一个admin_user。

有人知道我需要添加什么才能启用它吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-25 16:21:37

你有没有尝试过命名空间?

代码语言:javascript
复制
namespace :admin do 
  devise_for :users
  # if the above doesn't work 
  # devise_for :admin_users
end

此外,您可以尝试使用必要的字段覆盖如下所述的Administrate基本控制器:https://stackoverflow.com/a/59824297/1737811

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60386952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档