stream-chat-swift
stream-chat-swift copied to clipboard
Failure to obtain token results in an infinite loop
trafficstars
What did you do?
I have the following tokenProvider in my app:
private lazy var tokenProvider: TokenProvider = { [weak self] completion in
_ = self?.authRepository.chatToken()
.observeOn(MainScheduler.instance)
.subscribe(
onSuccess: { response in
if let chatToken = response.chatToken {
completion(.success(Token(stringLiteral: chatToken)))
do {
let decoder = JWTDecoder()
let jwtData = try decoder.decode(jwtToken: chatToken)
if let exp = jwtData["exp"] as? TimeInterval {
self?.tokenExpiryTime = exp
self?.tokenExpiryDate = Date(timeIntervalSince1970: exp)
}
} catch {
completion(.failure(AppErrors.generic))
}
} else {
completion(.failure(AppErrors.generic))
}
},
onError: { error in
completion(.failure(error))
}
)
}
If the authRepository.chatToken() fails with, for example, a 401 error, the stream chat will start repeatedly calling the tokenProvider and failing.
What did you expect to happen?
The completion handler of the connectUser to be called with an error. Or a way to break out of the loop.
What happened instead?
An infinite loop.
GetStream Environment
GetStream Chat version: 4.52.0 GetStream Chat frameworks: StreamChat, StreamChatUI iOS version: 17.5.1 Swift version: 5.8.1 Xcode version: 15.3 Device: iPhone 12