使用 cancancan 时确认 Devise 用户时出错
Error when confirming Devise user while using cancancan
在为用户注册发送的电子邮件中确认 link 后出现此错误:
uninitialized constant Confirmation
NameError in Devise::ConfirmationsController#show
但是如果我通过删除 ApplicationController
中的 load_and_authorize_resource
来关闭 Cancancan
,错误就不会发生并且用户可以成功地遵循确认 link。
我已经尝试在覆盖的 Devise 控制器中添加 skip_load_and_authorize_resource
以进行确认-- Users::ConfirmationsController < Devise::ConfirmationsController
。
根据您的解释可能是:
uninitialized constant Confirmation
的原因可能是它试图通过控制器名称找出与此控制器关联的模型,并且它得到的结果是Confirmation
但是没有模型与那个名字.
skip_load_and_authorize_resource
可能无法工作,直到您在覆盖的控制器本身中具有 show
操作(在子 class 上添加前操作不应该在父 class 我觉得)
我不确定这是否有效,但您可以尝试这样的操作,然后在您的 ApplicationController
:
中查看
load_and_authorize_resource unless: :devise_controller?
所以这将跳过所有设备控制器的before_action
。
load_and_authorize_resource
不应该用在ApplicationController
中,因为它不兼容没有同名型号的设备和控制器。相反,根据需要在每个控制器中设置 load_and_authorize_resource
。
在为用户注册发送的电子邮件中确认 link 后出现此错误:
uninitialized constant Confirmation
NameError in Devise::ConfirmationsController#show
但是如果我通过删除 ApplicationController
中的 load_and_authorize_resource
来关闭 Cancancan
,错误就不会发生并且用户可以成功地遵循确认 link。
我已经尝试在覆盖的 Devise 控制器中添加 skip_load_and_authorize_resource
以进行确认-- Users::ConfirmationsController < Devise::ConfirmationsController
。
根据您的解释可能是:
uninitialized constant Confirmation
的原因可能是它试图通过控制器名称找出与此控制器关联的模型,并且它得到的结果是Confirmation
但是没有模型与那个名字.skip_load_and_authorize_resource
可能无法工作,直到您在覆盖的控制器本身中具有show
操作(在子 class 上添加前操作不应该在父 class 我觉得)
我不确定这是否有效,但您可以尝试这样的操作,然后在您的 ApplicationController
:
load_and_authorize_resource unless: :devise_controller?
所以这将跳过所有设备控制器的before_action
。
load_and_authorize_resource
不应该用在ApplicationController
中,因为它不兼容没有同名型号的设备和控制器。相反,根据需要在每个控制器中设置 load_and_authorize_resource
。