使用Devise登录时遭遇401 Unauthorized错误求助
Devise API登录返回"需要先登录"的问题
我已经花了好几天尝试解决这个问题,完全没头绪。查了一堆Stack Overflow相关帖子都没用。
我的代码情况
routes.rb
namespace :v1 do devise_for :users, defaults: { format: :json }, controllers: { sessions: 'api/v1/sessions' } end
会话控制器(app/controllers/api/v1/sessions_controller.rb)
module Api module V1 class SessionsController < Devise::SessionsController skip_before_action :verify_authenticity_token end end end
测试请求
我发送过两种格式的登录请求:
- 第一种请求:
curl --location --request POST 'http://localhost:3000/api/v1/users/sign_in' \ --header 'Content-Type: application/json' \ --data-raw '{ "user": { "email": "user@example.com", "password": "Test123!" } }'
- 第二种请求:
curl --location --request POST 'http://localhost:3000/api/v1/users/sign_in' \ --header 'Content-Type: application/json' \ --data-raw '{ "email": "cfo@test.com", "password": "Test123#" }'
我反复确认过凭据是正确的,但每次都会收到如下错误响应:
{"error":"You need to sign in or sign up before continuing."}
application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_in, keys: %i[email password]) end end
已尝试的无效方案
- 试过针对Rails+Devise新安装返回401的解决方案,但没用(因为我没有渲染HTML)
- 试过把请求参数里的
password改成encrypted_password,依然无效
另外还有个疑问:Devise::SessionsController会不会是经过api/v1目录下的base_controller.rb(同样继承自ActionController::Base),而不是application_controller.rb?
内容的提问来源于stack exchange,提问作者David Armendariz
相关产品推荐
相关产品推荐

