gpt4 book ai didi

android - 通过改造在请求 header 中发送 Firebase ID token (不是授权 token )

转载 作者:行者123 更新时间:2023-12-05 07:39:36 24 4
gpt4 key购买 nike

我正在使用 Firebase ID Tokens授权来自用户的 HTTP 请求。目前我设置了一个请求拦截器,它将请求 Firebase ID token 并将其添加到请求 header 中。

private OkHttpClient.Builder getOKHttpBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();

builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();

Request.Builder newRequest = request.newBuilder().header("x-access-token", getNewTokenPassively());
return chain.proceed(newRequest.build());
}
});

return builder;
}

private String getNewTokenPassively() {
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

final String[] currentToken = {null};

if(currentUser != null) {
currentUser.getIdToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
try {
currentToken[0] = task.getResult().getToken();
}
catch (Exception e) {
//TODO: Investigate
}
}
});
}

while(currentToken[0] == null) {
//do nothing
}

return currentToken[0];
}

此代码在 SDK 24 及以下版本中完美运行,但在 SDK 25 及以上版本上运行时,HTTP 请求不会流过,甚至不会在 logging-interceptor 上记录任何内容。

我在下面的代码中使用这个拦截器。

public Retrofit getRetrofit() {
return new Retrofit.Builder()
.baseUrl(baseUrl)
.client(getOKHttpBuilder().build())
.addConverterFactory(converter)
.build();
}

如果我删除 .client(getOKHttpBuilder().build()) 并将其替换为 .client(new OkHttpClient.Builder().build()) 一切工作正常。

最佳答案

原因是您的 getNewTokenPassively() 函数内部有一个异步的 onComplete 调用。您需要在将 token 添加到请求 header 之前获取 token 。

关于android - 通过改造在请求 header 中发送 Firebase ID token (不是授权 token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47014845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com