【问题标题】:After updating to Rails 5 and Devise 4.0.0.rc1, the devise authenticate_user! method is not defined更新到 Rails 5 和 Devise 4.0.0.rc1 后,devise authenticate_user!方法未定义
【发布时间】:2016-02-14 16:41:24
【问题描述】:

我有一个 rails 应用程序,它与 devise 3 和 rails 4 完美运行。我将 rails 更新为 5,它提供了 DEPRECATION WARNING: alias_method_chain is deprecated。所以我不得不将设计版本更改为 4.0.0.rc1。

现在似乎该设计没有生成authenticate_user!is_admin 等方法。

我收到以下错误

Before process_action callback :authenticate_user! has not been defined (ArgumentError)

我尝试了一切,包括卸载设计并再次安装,然后尝试从头开始创建一个单独的模型,但仍然没有定义方法。

有什么想法吗?

【问题讨论】:

  • 这方面有更新吗?我正在尝试在 Rails 5 上实现逐步参与,并在 wiki 之后遇到类似的错误。
  • 我不确定你到底得到了什么错误,就我而言,这是 rails5 中的功能升级,可以通过添加额外参数来修复它,我在接受的答案中提到了它。我可以通过放置binding.pry 调试语句来检查文件来找出问题如果你从终端运行它,你可能会得到一个抛出错误的文件路径和行号,所以不要害怕潜入它.

标签: ruby-on-rails devise ruby-on-rails-5


【解决方案1】:

答案是简单地改变:

skip_before_action :authenticate_user!

到---

skip_before_action :authenticate_user!, raise: false

https://github.com/plataformatec/devise/issues/4207 https://github.com/thoughtbot/clearance/issues/621

【讨论】:

  • 这样安全吗,看起来有点hacky?
【解决方案2】:

我可以确定问题,在 Rails 5 中,如果在调用时未定义跳过方法,除非我们添加 :unless 条件,否则将出现异常。

【讨论】:

  • 您能否详细说明您是如何解决此问题的?
  • 现在我在config/environments/production.rb 中设置config.eager_load = false 作为解决方法。
  • 问题是在rails 5中,如果没有定义要跳过的方法,跳过回调选项将抛出异常。在我的代码中,我跳过了 authenticate_user!应用程序初始化时的方法,当时没有定义方法,稍后设计定义方法。如果我们希望 Rails 不抛出异常,我们必须使用另一个子句,如下所示:Devise::SessionsController.skip_before_action :authenticate_user!, raise: false
  • 这完全令人困惑。你什么时候跳过这个?为什么?这实际上是如何解决这个问题的?
  • @YannickSchuchmann 我不知道为什么会这样,但谢谢。
【解决方案3】:

在 rails5 支持自行设计之前,您可以尝试使用这个 fork:

gem 'devise', github: 'twalpole/devise', branch: 'rails5'

【讨论】:

  • 这可以做更多的解释。
  • 这可能已经过时了——fork 已经 3 个月大了,devise master 现在也有类似的变化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多