ruby-on-rails - 过滤器链停止为 :verify_signed_out_user rendered or redirected error when making a delete fetch in Rails Devise

标签 ruby-on-rails reactjs devise

我使用 react 作为我的前端,并使用 rails/devise 作为我的后端/身份验证。登录和注册新用户可以正常工作,但是当我尝试使用由设计创建的/users/sign_out 路由注销时(如 wiki 所述),我收到错误消息:

Filter chain halted as :verify_signed_out_user rendered or redirected
我的 fetch 调用如下:
const logout = (event) => {
    event.preventDefault();
    fetch('http://localhost:3000/users/sign_out',{
        method: 'DELETE',
        headers: {
            'Content-type': 'application/json',
            'Accept': 'application/json'
        },
        body: JSON.stringify({ 
            user: JSON.parse(localStorage.getItem('user'))
        })
    })
    .then(res => res.json())
    .then(resp => console.log(resp))
}
我也对我的应用程序 Controller 进行了以下更改。不完全确定这是否可能是问题的一部分:
class ApplicationController < ActionController::API
    include ActionController::MimeResponds
    respond_to :json, :html

    before_action :configure_permitted_parameters, if: :devise_controller?
    before_action :authenticate_user!

    protected

    def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:login, keys: [:username, :email, :password])
        devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :email, :password])
        devise_parameter_sanitizer.permit(:account_update, keys: [:username])
    end

end
我试过使用
skip_before_action :verify_signed_out_user 
在我的应用程序 Controller 中,但它引发了该方法未定义的错误。
ArgumentError (Before process_action callback :verify_signed_out_user has not been defined):
任何和所有的帮助表示赞赏。谢谢!

最佳答案

我认为问题在于您没有在请求中发送用户身份验证 token header 。您只是将用户作为正文参数发送。通常在逻辑中我们将 Header 设置为 Authorization: Bearer xyz对用户进行身份验证。
当您希望用户退出时,您必须发送 Auth token ,以便设计可以识别用户并将用户退出。
因此,当设计尝试运行 verify_signed_out_user -> 由于用户未登录(在您的情况下没有身份验证 token ),因此会出现此问题。
verify_signed_out_user不是像 authenticate_user! 这样的全局方法,所以你不能调用before_action :verify_signed_out_user就像我们通常所说的 before_action :authenticate_user!对用户进行身份验证。

关于ruby-on-rails - 过滤器链停止为 :verify_signed_out_user rendered or redirected error when making a delete fetch in Rails Devise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62604173/

相关文章:

ruby-on-rails - 无法删除有关 case_sensitive 的警告

ruby-on-rails - 有没有办法将 "before_filter :authenticate_user!"与表中的 bool 值一起使用?

ruby-on-rails - Cloud 9 的 Rails 教程错误

ruby-on-rails - 在运行时更改 Rails cache_store?

ruby-on-rails - ORM 与 Ruby on Rails 的关系是什么?

javascript - React 属性传播符号也会传递给子元素吗?

javascript - 如何同时过滤和映射数组?

ruby-on-rails - 是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

ruby-on-rails - 仅加载关联对象的一部分

css - 使用 React Styled Components 在两种类型的组件之间共享相同的样式