使用Rails 3和Devise管理用户账户

10 浏览
0 Comments

使用Rails 3和Devise管理用户账户

我在一个Rails 3应用程序中实施了Devise,并且我需要管理员用户能够管理用户。用户无法自行注册,因此必须由管理员创建账户。怎样才是最好的方法呢?\n创建自己的UsersController似乎并不符合DRY原则,因为Devise已经提供了Devise::RegistrationController,但我没有看到其他选择。

0
0 Comments

在Rails 3和Devise中管理用户帐户的问题是因为默认情况下,Devise的注册控制器(RegistrationController)允许任何人注册一个帐户,而不进行验证。这可能导致安全问题,因为任何人都可以注册并访问应用程序的受限资源。

为了解决这个问题,可以通过覆盖Devise的注册控制器来提供所需的功能。可以在Stack Overflow上找到一个回答,其中提到了如何覆盖Devise的注册控制器。具体方法是创建一个自定义的注册控制器,并在其中添加一个before_filter(在Rails 5及更高版本中应使用before_action),以确保只有管理员才能进行注册请求。

以下是一个示例代码,演示如何覆盖Devise的注册控制器并添加before_filter(before_action)来限制只有管理员可以进行注册请求:

class RegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_admin!
  private
  def authenticate_admin!
    unless current_user.admin?
      flash[:alert] = "You are not authorized to perform this action."
      redirect_to root_path
    end
  end
end

通过这种方式,只有管理员才能够注册新用户,其他用户将被重定向到主页并收到相应的错误消息。

另外,还有一种解决方案是创建自己的用户控制器(UsersController)。这种方法可以更灵活地控制用户帐户管理的行为,并且可以自定义实现自己的方法。

以上是解决在Rails 3和Devise中管理用户帐户的问题的方法。通过覆盖Devise的注册控制器或创建自己的用户控制器,可以实现对用户帐户的管理和控制。

0
0 Comments

问题出现的原因:

- 对于管理用户账户和维护与之相关的管理字段来说,Devise框架并不是最合适的选择,因为Devise的设计初衷是用于认证而不是管理用户记录。

解决方法:

- 创建一个自己的UsersController用于管理用户账户,与RegistrationController并列存在。

- 这样做是为了实现管理员操作的RESTful控制器,将用户账户管理从Devise框架中分离出来。

- 必须自己创建用户模型来解决这个问题。

0