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

Ruby on Rails 8 API无法被Android AVD连接的问题及解决方案

问题:Rails 8 API在Postman正常,Android AVD请求返回401未授权

Ruby on Rails 8 API在Postman中可正常使用,但通过Android Studio的AVD(安卓虚拟设备)连接时返回401未授权错误。已按教程配置Devise认证键为name,CORS允许所有来源访问,但问题依旧。

已解决:需添加请求头Content-Type: application/json

修改后的Fuel请求代码:

val (request, response, result) = Fuel.post(inputURL)
            .header("Content-Type", "application/json")
            .body(jsonElement.toString())
            .response()

相关代码及日志信息

MainActivity.kt 原代码

var baseURL = "http://10.0.2.2:3000/"
var connectURL = baseURL+"users/login"
var rrr: List<Any> = mutableListOf()

//MainClass body


    fun connectButton(view: View) {
        if (binding.loginNameField.text.isNotEmpty() && binding.loginPasswordField.text.isNotEmpty()) {
            Thread{
                rrr = fuelPost(connectURL)
            }.start()
        }
    }

    private fun fuelPost(inputURL: String,
                                 name: String = binding.loginNameField.text.toString(),
                                 password: String = binding.loginPasswordField.text.toString()): List<Any> {

        val json = parseToJsonElement("""{"user":{"name":"$name","password":"$password"}}""")

        val (request, response, result) = Fuel.post(inputURL).body(json.toString()).response()
        Log.i("request", request.toString())
        Log.i("response", response.toString())
        Log.i("result", result.toString())
        return listOf(request, response, result)
    }
}

Rails控制台日志

Started POST "/users/login" for 127.0.0.1 at 2025-01-15 15:18:05 +0200
Processing by Users::SessionsController#create as JSON
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)

Android Studio控制台日志

--> POST http://10.0.2.2:3000/users/login
Body : {"user":{"name":"MUSTDOS","password":"fakepass"}}
...
Body : {"error":"You need to sign in or sign up before continuing."}
.............

sessions_controller.rb

class Users::SessionsController < Devise::SessionsController
    include RackSessionsFix
  private
  def respond_with(current_user, _opts = {})
  logger.debug "current user: #{current_user.inspect}"
    render "users/sessions/session_success", status: :ok
  end

  def respond_to_on_destroy
    if current_user
      render "users/sessions/session_destroy", status: :ok
    else
      render "users/sessions/session_destroy_errors", status: :unauthorized
    end
  end
end

cors.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do
   allow do
     origins "*"

     resource "*",
       headers: :any,
       expose: ["Authorization"],
       methods: [:get, :post, :put, :patch, :delete, :options, :head]
   end
 end

内容的提问来源于stack exchange,提问作者user199135

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:23:12