Laravel API,从 android/retrofit 调用时获得 401 未授权
Laravel API, getting 401 unathorized when calling from android/retrofit
我正在构建一个 android 应用程序,使用 laravel 和护照进行身份验证,我的注销方法如下所示
public function logout(Request $request){
$accessToken = Auth::user()->token();
DB::table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update(['revoked' => true]);
$accessToken->revoke();
return response()->json([], 204);
}
我用邮递员对其进行了测试并且它有效,它返回 204,没有应有的内容。
Postman screenshot
但是当我尝试从 android 应用调用它时,它总是返回 401,未授权消息
我的所有其他 POST 方法都工作正常,这是我从 android 使用 retrofit
的调用
private void logout() {
tokenManager = TokenManager.getInstance(getSharedPreferences("prefs",MODE_PRIVATE));
Log.i("tokenLogout",tokenManager.getToken().getAccessToken());
call = service.logout(tokenManager.getToken());
call.enqueue(new Callback<AccessToken>() {
@Override
public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
Log.i(TAG, "logout response: " + response.code());
//startActivity(new Intent(mapActivity.this,loginActivity.class));
}
@Override
public void onFailure(Call<AccessToken> call, Throwable t) {
Log.i(TAG, "logout failed");
}
});
}
这是我的 ApiService 接口
@POST("logout")
@FormUrlEncoded
Call<AccessToken> logout(@Field("access_token") AccessToken accessToken);
尝试使用
Call<AccessToken> logout(@Header("Authorization") String token,@Field("access_token") AccessToken accessToken);
在你的代码中使用
call = service.logout("Bearer : XXXXX",tokenManager.getToken());
我建议您使用 HttpLoggingInterceptor 以查看有关您的请求的所有日志。 url: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
我正在构建一个 android 应用程序,使用 laravel 和护照进行身份验证,我的注销方法如下所示
public function logout(Request $request){
$accessToken = Auth::user()->token();
DB::table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update(['revoked' => true]);
$accessToken->revoke();
return response()->json([], 204);
}
我用邮递员对其进行了测试并且它有效,它返回 204,没有应有的内容。
Postman screenshot
但是当我尝试从 android 应用调用它时,它总是返回 401,未授权消息
我的所有其他 POST 方法都工作正常,这是我从 android 使用 retrofit
的调用private void logout() {
tokenManager = TokenManager.getInstance(getSharedPreferences("prefs",MODE_PRIVATE));
Log.i("tokenLogout",tokenManager.getToken().getAccessToken());
call = service.logout(tokenManager.getToken());
call.enqueue(new Callback<AccessToken>() {
@Override
public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
Log.i(TAG, "logout response: " + response.code());
//startActivity(new Intent(mapActivity.this,loginActivity.class));
}
@Override
public void onFailure(Call<AccessToken> call, Throwable t) {
Log.i(TAG, "logout failed");
}
});
}
这是我的 ApiService 接口
@POST("logout")
@FormUrlEncoded
Call<AccessToken> logout(@Field("access_token") AccessToken accessToken);
尝试使用
Call<AccessToken> logout(@Header("Authorization") String token,@Field("access_token") AccessToken accessToken);
在你的代码中使用
call = service.logout("Bearer : XXXXX",tokenManager.getToken());
我建议您使用 HttpLoggingInterceptor 以查看有关您的请求的所有日志。 url: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor