如何打印私有 API-端点 JSON-对象 - 受 Android 中的 Auth0-JWT 保护?
How to print private API-endpoint JSON-objects - protected by Auth0-JWT in Android?
我有一个带有 NodejS 后端的 Android 应用程序。后端提供了一个私有 API-endpoint,我用 Auth0.
保护了它
这是我的 NodeJS 代码:
app.get('/api/private', jwtCheck, function(req, res) {
res.json({
message: 'Hello World from private API-Endpoint!'
});
});
为了从 Android 应用程序中调用我的私有 API,我使用了 code-samples from 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 调用成功 以及何时我调用 print_private_api_message() 我的 NodeJS 控制台记录了 UnauthorizedError: No authorization token was found.
所以,我的问题是:如何使用 accessToken 并从我受保护的 API-endpoint 打印消息?
您需要发送授权header。您可以在以下问题中看到如何:How to send Authorization header in Android using Volley library?
您需要添加的部分是世代 header:
@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;
}
我有一个带有 NodejS 后端的 Android 应用程序。后端提供了一个私有 API-endpoint,我用 Auth0.
保护了它这是我的 NodeJS 代码:
app.get('/api/private', jwtCheck, function(req, res) {
res.json({
message: 'Hello World from private API-Endpoint!'
});
});
为了从 Android 应用程序中调用我的私有 API,我使用了 code-samples from 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 调用成功 以及何时我调用 print_private_api_message() 我的 NodeJS 控制台记录了 UnauthorizedError: No authorization token was found.
所以,我的问题是:如何使用 accessToken 并从我受保护的 API-endpoint 打印消息?
您需要发送授权header。您可以在以下问题中看到如何:How to send Authorization header in Android using Volley library?
您需要添加的部分是世代 header:
@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;
}