Android Kotlin中用Volley添加授权Header做邮箱验证码验证报错求助
问题分析与修复方案
看起来你遇到的服务器错误,核心原因是把Bearer Token放错了位置——你现在把它塞进了请求体里,但按照API的设计(以及HTTP认证的标准规范),Token应该放在请求头中,而请求体只需要传递code字段就可以了。
我帮你修正了代码,同时优化了一些逻辑细节:
var codeEntered: String? = null txt_pin_entry.setOnPinEnteredListener { codeEntered = "$it" Toast.makeText(context!!.applicationContext, "验证码已输入: $codeEntered", Toast.LENGTH_SHORT).show() } submitBtn.setOnClickListener { // 先检查验证码是否为空,避免无效请求 if (codeEntered.isNullOrEmpty()) { Toast.makeText(context!!.applicationContext, "请输入验证码", Toast.LENGTH_SHORT).show() return@setOnClickListener } val url = "https://fathomless-badlands-69782.herokuapp.com/api/auth/verify" // 请求体只保留API要求的code字段 val params = HashMap<String, String?>() params["code"] = codeEntered val jsonObject = JSONObject(params as Map<*, *>) val request = object : JsonObjectRequest(Request.Method.PUT, url, jsonObject, Response.Listener { response -> try { Log.i("Registration", "验证响应: $response") // 只有验证成功后才跳转页面 val actionToVerificationResult = CodeVerificationFragmentDirections.actionToVerificationResult() Navigation.findNavController(it).navigate(actionToVerificationResult) Toast.makeText(context!!.applicationContext, "验证成功!", Toast.LENGTH_SHORT).show() } catch (e: Exception) { Log.e("Registration", "解析响应失败: ${e.message}") Toast.makeText(context!!.applicationContext, "解析响应出错", Toast.LENGTH_SHORT).show() } }, Response.ErrorListener { error -> Log.e("Registration", "验证错误: ${error.message}") Toast.makeText(context!!.applicationContext, "验证失败,请检查验证码或网络", Toast.LENGTH_SHORT).show() }) { // 重写getHeaders方法,把Bearer Token放在请求头里 override fun getHeaders(): MutableMap<String, String> { val headers = HashMap<String, String>() headers["Authorization"] = "Bearer $tokenCode" return headers } } VolleySingleton.getInstance(context!!.applicationContext).addToRequestQueue(request) }
关键修改点说明:
- 修正Token位置:通过重写
getHeaders()方法,将Authorization Bearer Token放在HTTP请求头中,这是符合REST API认证规范的正确做法 - 精简请求体:请求体只保留
code字段,完全匹配API期望的{ code: String }格式 - 增加前置校验:点击按钮前先检查验证码是否为空,避免发送无效请求
- 调整跳转时机:把页面跳转逻辑移到请求成功的回调里,确保只有验证通过后才跳转到结果页面,避免请求未完成就跳转的问题
- 优化日志与提示:更清晰的日志信息和用户提示,方便排查问题
另外还要注意:确保tokenCode是有效的、未过期的,并且格式正确(不要漏掉Bearer 前缀)。
内容的提问来源于stack exchange,提问作者Darotudeen
相关产品推荐
相关产品推荐

