如何在不断开连接的情况下刷新用户会话中的令牌

时间:2019-05-11 17:04:17

标签: android retrofit2 refresh-token

在使用后端的android应用中使用im的im已经使用Retrofit2存在。 当我插入login / password时,我已经在进行身份验证了,我从服务器获得了带有字符串响应的令牌响应,即时消息使用静态字符串值将令牌从我的loginClass传递到retrofitBuilder类。我没有使用模型AccesToken来获取令牌的回调,因为令牌的回调响应不是json格式,而是仅包含令牌的字符串。 所有这些都很好,工作正常, 问题是我要刷新令牌时。 在我的令牌中,我有一个字符串属性公司。当我使用已经具有Company value = 1的用户登录时;在令牌中,他只能在我的申请中看到该公司的信息。 登录后在仪表板上,我已经使用公司名称进行了微调。当我选择另一个公司时,我正在向服务器发送请求,并且我收到带有neww令牌的新响应,所以当我选择公司并获取它时,我需要手动获取新令牌,但是问题是当我选择公司时数据是没有自动更新,我必须断开并登录另外一次查看我已经选择的公司的数据,我已经做了验证器,但是我确实知道如何使用它来刷新我的令牌而不会断开连接。 选择微调框时,我有手动令牌 请给我一个解决方案,谢谢英语

这是我的服务电话:

@Headers("Accept: application/json") @POST("api/auth/token") Call<String>token3(@Body Useer useer);

这就是我从回拨电话中获取令牌的方式。

 JWT parsedJWT = new JWT(response.body());

                                        String token = response.body().toString();
                                        tokenManager.saveToken(token);

                                        tokeen =token;

这就是我如何在Retrofit构建器中获取令牌的方法:

 public static <T> T createServiceWithAuth(Class<T> service, final TokenManager tokenManager){
        String data=LoginActivity.getTokeen();

        OkHttpClient newClient = client.newBuilder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {

                Request request = chain.request();

                Request.Builder builder = request.newBuilder();
//                if(tokenManager.getToken().getKey() != null){
                    builder.addHeader("Authorization", "Bearer "+ data);
                 //     builder.addHeader("Authorization", "Bearer "+ );
                request = builder.build();
                return chain.proceed(request);

这是我从微调器中选择公司时从服务器手动获得新令牌的方式:

                    int hold = spinner.getSelectedItemPosition();
                    campany campanyy = campanyList.get(hold);
                    String selectcampp=campanyy.getName();

                    String usernme = "admin";
                    String password="Admin123*";
                    ChangeCMP change=new ChangeCMP(usernme,password,selectcampp);

                    Call<RefreshToken> call4=service.ChangeCMP(change);
                    call4.enqueue(new Callback<RefreshToken>() {
                        @Override
                        public void onResponse(Call<RefreshToken> call, Response<RefreshToken> response) {
                            if (response.isSuccessful()){
                            Log.w(TAG, "onResponse: " + response.body().getValue());

                            String NEWTOKEN=response.body().getValue().toString();

这是我的电话,要求手动获取新的刷新令牌:

 @POST("api/auth/PostChangeCMP")
    Call<RefreshToken>ChangeCMP(@Body ChangeCMP changeCMP );

0 个答案:

没有答案