Laravel API,从android / retrofit

时间:2018-01-22 22:32:05

标签: java android rest retrofit laravel-5.4

我正在使用laravel和passport构建一个带有身份验证的Android应用程序,我的注销方法看起来像这样

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的调用

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);

1 个答案:

答案 0 :(得分:0)

尝试使用

Call<AccessToken> logout(@Header("Authorization") String token,@Field("access_token") AccessToken accessToken);

并在您的代码中使用

call = service.logout("Bearer : XXXXX",tokenManager.getToken());

我建议您使用HttpLoggingInterceptor查看有关您请求的所有日志。网址:https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor