如何在拦截器中使用刷新令牌?

ttp71kqs  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(139)

我需要通过发送一个refreshtoken来捕获一个过期的令牌,作为回报,获取新的访问令牌和刷新令牌。下面我列出了我将要使用的代码。它写得不完整,因为我不完全理解一切。

@FormUrlEncoded
    @POST("/api/o/token/")
    Call<TokenModel> getToken(
            @Field("username") String username,
            @Field("password") String password,
            @Field("client_id") String clientId,
            @Field("client_secret") String clientSecret,
            @Field("grant_type") String grantType
    );
    @FormUrlEncoded
    @POST("/api/o/token/")
    Call<TokenModel> getNewToken(
            @Field("refresh_token") String refreshToken,
            @Field("client_id") String clientId,
            @Field("client_secret") String clientSecret,
            @Field("grant_type") String grantType
    );

    @GET("/api/users/profile")
    Call<UserProfile> getProfile();

拦截器

OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(logging)
            .addInterceptor(new AccessTokenInterceptor(preferences))

            .addInterceptor(new Interceptor() {
                @NotNull
                @Override
                public Response intercept(@NotNull Chain chain) throws IOException {
                    Request original = chain.request();
                    Request request = original.newBuilder()
                            .header("Authorization", ?)
                            .method(original.method(), original.body())
                            .build();

                    Response response =  chain.proceed(request);
                    Log.d("MyApp", "Code : "+response.code());
                    if (response.code() == 401){
                        ?
                        return response;
                    }
                    return response;
                }
            })
            .build();

我用问号指出了我不太明白的地方,我只是没有完全理解哈德。我应该在逗号后面加什么?服务器接收新令牌所需的一切(在我的例子中,它是string refreshtoken、string clientid、string clientsecret、string granttype)还是不是?那么,在这种情况下,tokenupdate()方法在任何地方都不起作用,只是一个例子,我怎么能继续使用改型呢

fun tokenUpdate () {
    val sharedPref = application?.getSharedPreferences("userInfo", MODE_PRIVATE)
    val tokenRefresh = sharedPref!!.getString("tokenRefresh", null)

    val call: Call<TokenModel> = NetworkService.getInstance()
            .jsonApi
            .getNewToken(tokenRefresh,clientId,clientSecret,grantTypeRefreshToken)
            call.enqueue(object : Callback<TokenModel> {
                override fun onResponse(call: Call<TokenModel>, response: Response<TokenModel>) {
                    val editor = sharedPreferences!!.edit()
                    if (response.isSuccessful) {
                        response.body()?.let {
                            editor.putString("access_token", it.token)
                            editor.putString("token_Refresh", it.tokenRefresh)
                            editor.apply()
                        }
                    }
                }
                override fun onFailure(call: Call<TokenModel>, t: Throwable) {}
            })

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题