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
相关产品推荐
相关产品推荐

