我使用 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/