【问题标题】:Custom Devise User not authorized for Edit自定义设计用户未获得编辑授权
【发布时间】:2012-07-10 22:27:33
【问题描述】:

我有一个这样的自定义用户:

class PersonsController < UsersController

end

但是,在正常登录后,当我单击“人员/编辑”时,我会被重定向到登录页面...我可以在日志中看到以下内容:

由 Person::RegistrationsController#edit 作为 HTML 处理完成 401 0ms内未授权

然后我再次被重定向到登录页面,此时我没有丢失会话,我可以点击我的个人资料并查看帐户详细信息。

只是不确定为什么 Devise 的编辑操作有问题

我的注册控制器中也有以下结构

class Person
     class RegistrationsController < Devise::RegistrationsController
     end
end

任何帮助,不胜感激。谢谢。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    您自定义设计的最终目标尚不清楚,但如果您尝试编辑当前用户的信息,我建议您检查此链接。 Devise - How-To:-Allow-users-to-edit-their-password

    此示例是编辑用户密码,但如果您需要更多字段,您可以毫无问题地添加它。但是您应该有一个使用用户模型的单独控制器。

    【讨论】:

    • 嗨 Jorge,在这种情况下,用户实际上已登录,会话处于活动状态,这很奇怪,实际上用户已被授权时,它会将我重定向为 Unathorized。这里唯一的区别是用户继承自UsersController。所以不知道为什么它没有检测到有效的会话
    【解决方案2】:

    其实我找到了解决方案,我不得不在我的自定义 Person::RegistrationsController 中重新定义这个方法

    def authenticate_scope!
      send(:"authenticate_user!", :force => true)
      self.resource = send(:"current_user")
    end
    

    似乎会话没有自定义“current_person”方法,但始终是 current_user,因为我使用“users/sign_in”登录(我希望系统中的其他自定义用户有一个通用登录点)。如果我使用“persons/sign_in”登录,则不需要此解决方法。由于某些原因。我不太清楚为什么,这是设计的 github repo 中的原始方法:

    def authenticate_scope!
      send(:"authenticate_#{resource_name}!", :force => true)
      self.resource = send(:"current_#{resource_name}")
    end
    

    我希望这对将来的人有所帮助,问候。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多