如何打印私有api端点json对象-在android中受auth0 jwt保护?

osh3o9ms  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(346)

我有一个带有nodejs后端的android应用程序。后端提供了一个私有api端点,我已经用auth0保护了它。
这是我的节点代码:

app.get('/api/private', jwtCheck, function(req, res) {
  res.json({
    message: 'Hello World from private API-Endpoint!'
  });
});

为了从android应用程序调用我的私有api,我使用了auth0的代码示例。
要从端点打印消息,我想使用以下功能:

private void print_private_api_message() {
    RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
    String url = "http://10.0.2.2:3000/api/private";

    JsonArrayRequest request = new JsonArrayRequest(com.android.volley.Request.Method.GET, url, null, new com.android.volley.Response.Listener<JSONArray>() {

        public void onResponse(JSONArray response) {
            try {
                JSONObject message_private = response.getJSONObject(0);
                String message_from_backend = message_private.getString("message");

                Toast.makeText(MainActivity.this, message_from_backend, Toast.LENGTH_SHORT).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new com.android.volley.Response.ErrorListener() {
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    queue.add(request);
}

我把这个函数称为:

public void onResponse(@NotNull Call call, @NotNull final Response response) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (response.isSuccessful()) {
                        Toast.makeText(MainActivity.this, "API call success!", Toast.LENGTH_SHORT).show();
                        print_private_api_message();
                    } else {
                        Toast.makeText(MainActivity.this, "API call failed.", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

当我使用auth0帐户登录并调用api时,我会收到toast消息:api call success;当我调用print\u private\u api\u message()时,我的nodejs console logged unauthorizederror:找不到授权令牌。
所以,我的问题是:如何使用accesstoken并从受保护的api端点打印消息?

sg3maiej

sg3maiej1#

您需要发送授权标头。您可以在下面的问题中看到:如何使用volley库在android中发送授权头?
您需要添加的部分是生成标头:

@Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headerMap = new HashMap<String, String>();
                headerMap.put("Content-Type", "application/json");
                headerMap.put("Authorization", "Bearer " + ACCESS_TOKEN);
                return headerMap;
            }

相关问题