我一直在想什麼是解決令牌刷新問題的最佳方法。 我連接到一個API,它爲我提供了一個auth-token,如果在調用期間有一段時間,我得到一個INVALID_AUTH,我需要重新進行身份驗證。 所以對於幼稚的做法我這樣做使用RxJava管理身份驗證令牌
@SuppressWarnings("unchecked")
@Override
public Observable<User> getUsers() {
return runCommandAndrefreshAuthIfNecessary(new RequestCommand() {
@Override
public Observable create() {
return createService(UsersApi.class).getUsers();
}
});
}
private Observable runCommandAndrefreshAuthIfNecessary(final RequestCommand command) {
return command.create()
.onErrorResumeNext(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
return handleRefreshToken(command);
}
});
}
private Observable<?> handleRefreshToken(final RequestCommand command) {
return refreshToken().flatMap(new Func1<Boolean, Observable<?>>() {
@Override
public Observable<?> call(Boolean aBoolean) {
return command.create();
}
});
}
正如你可以看到我只是包裝改造命令,如果我得到一個錯誤,我運行refreshToken(),令牌刷新而我再次運行該命令改造,所以最終Observable被傳回給用戶。按預期工作。 我正在努力的事情是什麼發生我多次調用,例如,我打電話getUsers和getFlags一個接一個。他們兩個都得到了INVALID_AUTH,現在都是fire refreshToken(),這是不好的。 我正在尋找一種rx-java方式來管理調用,意思是在getUsers第一次調用之後觸發refreshToken,之後的任何調用都需要等待refreshToken結束,然後纔會觸發retrofit命令。
任何建議將不勝感激。
你有沒有發現任何其他的解決辦法? @alexk –