gpt4 book ai didi

ruby-on-rails - 拦截设计 active_for_authentication 错误消息

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:19 25 4
gpt4 key购买 nike

我正在尝试实现“禁用用户”功能。从各种来源,我读到可以在我的 user.rb 中关注

  def active_for_authentication?
super && disabled_at.blank?
end

def inactive_message
'Your account has been disabled.'
end

这工作正常,在用户被禁用后,它会注销他并指向登录页面,并且还会显示正确的非事件消息。

但是,当用户尝试登录(通过 ajax)时,会发生以下情况:

Request URL:http://localhost:3000/users/sign_inRequest Method:POSTStatus Code:302 Moved Temporarily

But in the server console its actually

Completed 401 Unauthorized in 132ms

This is my sessions_controller.rb

def create
self.resource = warden.authenticate!(scope: resource_name, recall: "#{controller_path}#failure_with_ajax")
sign_in(resource_name, resource)
trial_mode_days_left?(resource)
render json: { redirect: root_path }, status: :ok
end

def failure_with_ajax
render json: { error: t('devise.failure.invalid') }, status: :unprocessable_entity
end

问题是当用户被禁用时,永远不会调用 failure_with_ajax,但是当输入的凭据错误时它可以正常工作。我不知道为什么当active_for_authentication 为false 时不触发召回,以及如何将inactive_message 传递给前端用户。

最佳答案

这是因为 warden.authenticate 在调用 active_for_authentiction 时不会抛出带有选项的失败响应。它只是简单地调用 super 方法失败,并且不会抛出给定“召回”的选项。我找到了它的补丁。你必须覆盖这个设计。解决方案是here

关于ruby-on-rails - 拦截设计 active_for_authentication 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22302598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com