You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:15:38