我正在使用带有jetpack导航组件的android应用程序,该组件使用访问和刷新令牌进行身份验证。对于身份验证,我使用okhttp3拦截器和身份验证器。当身份验证器无法基于刷新令牌刷新访问令牌时,存在一种极端情况。发生这种情况时,应显示登录片段。
public class TokenAuthenticator implements Authenticator {
private AuthService authService;
private AppPreferences appPreferences;
private TokenInterceptor tokenInterceptor;
@Inject
public TokenAuthenticator(AuthService authService, AppPreferences appPreferences, TokenInterceptor tokenInterceptor) {
this.authService = authService;
this.appPreferences = appPreferences;
this.tokenInterceptor = tokenInterceptor;
}
@Override
public Request authenticate(Route route, Response response) throws IOException {
String refreshToken = appPreferences.getRefreshToken();
if (refreshToken == null) {
// Here we should navigate to login fragment
return null;
}
AccessTokenByRefreshRequest accessTokenRequest = new AccessTokenByRefreshRequest(refreshToken);
AccessToken accessToken = authService.getAccessTokenByRefreshToken(accessTokenRequest).execute().body();
if (accessToken != null) {
appPreferences.setAccessToken(accessToken.getAccessToken());
tokenInterceptor.setAccessToken(accessToken.getAccessToken());
return response.request().newBuilder()
.header("Authorization", "Bearer " + accessToken.getAccessToken())
.build();
} else {
// Here we should navigate to login fragment
return null;
}
}
当身份验证器失败时,导航到登录片段的正确方法是什么?我有一些选择: