【问题标题】:Authentication failed using volley使用凌空验证失败
【发布时间】:2019-03-09 20:52:32
【问题描述】:

我正在尝试从服务器(Laravel)获取令牌并保存到数据库(android),但是当向服务器发送请求时出现此错误:

E/Volley: [276] BasicNetwork.performRequest: Unexpected response code 401 for http://192.168.1.4:8000/api/user/login
E/Volley: [276] BasicNetwork.performRequest: Unexpected response code 401 for http://192.168.1.4:8000/api/user/login
D/error: com.android.volley.AuthFailureError

安卓代码(java):

  public void loginUser(String email, String password, final OnLoginResponse onLoginResponse){
            JSONObject requestJsonObject=new JSONObject();
            try {
                requestJsonObject.put("email",email);
                requestJsonObject.put("password",password);
            JsonObjectRequest request=new JsonObjectRequest(Request.Method.POST, "http://192.168.1.4:8000/api/user/login",requestJsonObject , new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    onLoginResponse.onResponse(response.optString("token"));

                    Log.d("response",response.toString());
                }

            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("error",error.toString());
                }
            }) {
                /**
                 * Passing some request headers*
                 */
                @Override
                public Map getHeaders() throws AuthFailureError {
                    HashMap headers = new HashMap();
                    headers.put("Content-Type", "application/json");
                    headers.put("csrf-token", "X-XSRF-TOKEN");

                    return headers;
                }
            };
            request.setRetryPolicy(new DefaultRetryPolicy(18000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            Volley.newRequestQueue(context).add(request);
        } catch (JSONException e) {
            Log.e(TAG, "loginUser: "+e.toString());
        }
    }

我使用邮递员检查了客户端,这没有问题,并且返回令牌没有问题。

这是邮递员的截图:

enter image description here

【问题讨论】:

  • 你能展示一下你是如何在邮递员中完成请求的吗?
  • 是的,我发送了格式如下的 json { username:"example" , ...} 和邮递员以 Json 格式返回令牌。
  • 您能否将您在 Postman 中发送的确切请求发布为 JSON 或屏幕截图,以检查您如何发送请求标头
  • 当然,添加截图。
  • 在您的屏幕截图中,您上传的内容有 name 不在您的 java 代码中,它有不同的端点 localhost/register 而在您的 java 中您有 192.168.1.4.../login。您能否在正确的请求中向邮递员展示(我在此表示同情,屏幕截图与您使用 Java 和 Volley 尝试的代码看起来不一样)您在哪里使用像 csrf-token 这样的标头?

标签: java android json laravel android-volley


【解决方案1】:

问题可能在于:

  • 标题

  • 一旦到达函数 login(...),变量名和密码可能被传递为空错误或格式错误

  • 参数(也许您对后端有更多期望)
  • 可能是后端的问题(可能是 TokenMismatchException,它与我在您的 Android Java 代码中看到的 csrf-token 标头有关

【讨论】:

  • 是的,我检查了插入我的应用程序 (android) 中的密码,该密码格式错误(当我使用邮递员请求服务器时,使用密码和电子邮件插入应用程序(android)我看到了这个问题错误)
  • 太棒了!很高兴知道我们发现了这个问题!祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多