首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用设计器进行安全管理注册

使用设计器进行安全管理注册
EN

Stack Overflow用户
提问于 2016-08-19 18:57:57
回答 1查看 640关注 0票数 0

我觉得答案是“这是内置的,笨蛋”,但我找不到文件来证实我的怀疑。

我使用的是一个Rails应用程序,我的问题是:“我如何创建新的管理用户?”我问这个问题的原因是,遵循Devise似乎只是创建了一个可以公开/admins/sign的结构,类似于它为新用户公开/user/sign的方式。

现在,一般来说,我不希望任何人去/admins/登录仅仅是为了看看他们是否可以。但我真的不想指望这一点,并制造一个(相当大的漏洞)的弱点。因此,我的后续问题是:“我如何确保管理员注册,以便只有正确的人才能看到它?”和/或“有什么更好的选择来处理管理帐户的设计?”

编辑1

我发现了(在他们的医生里)确保管理员注册的明显答案。如果我删除管理模型中的:registerable和其他几个配置选项,并使用适当的设置运行迁移,则该路由根本无法到达任何类型的管理注册。太棒了。

我想我现在的第一个问题仍然存在:“我现在如何创建一个新的管理员?”这并不是说现在任何人都可以注册成为管理员,但我也不知道我或其他人如何创建一个管理帐户。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 19:30:45

Devise是一个很好的身份验证宝石,但是它缺少一些关键特性,比如您只想让admin来创建用户。对于很多项目来说,这几乎是一般用途的要求。

对于这个问题,没有一个单一的解决方案。

这里有几件事情是可以设想的。

  1. 注册是公开的
  2. 已经登录的用户无法注册
  3. 新注册的用户是自动登录后,成功注册。

现在我们要改变上述三种行为

我假设您的用户模型是user,并为user配置devise

首先,您需要覆盖设计注册控制器。

代码语言:javascript
运行
复制
 ## app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
  before_action :authenticate_user!, :redirect_unless_admin,  only: [:new, :create]
  skip_before_action :require_no_authentication

  private
  def redirect_unless_admin
    unless current_user.try(:admin?)
      flash[:error] = "Only admins can do that"
      redirect_to root_path
    end
  end

  def sign_up(resource_name, resource)
    true
  end
end


# config/routes.rb
Rails.application.routes.draw do
  devise_for :users, :controllers => { :registrations => 'registrations'}
end

以下是上述三个问题的处理方法。

  1. before_action确保用户登录,并重定向他们,除非他们是管理员,如果他们试图注册。
  2. 已经登录的问题是由Devise的require_no_authentication方法引起的,跳过它解决了这个问题。
  3. 接下来是新创建的用户自动登录。执行此操作的sign_up助手方法被重写以防止自动登录。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39046036

复制
相关文章

相似问题

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