stream-chat-swift icon indicating copy to clipboard operation
stream-chat-swift copied to clipboard

Failure to obtain token results in an infinite loop

Open pavermakov opened this issue 1 year ago • 5 comments
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.

Screenshot 2024-09-18 at 19 15 24

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

pavermakov avatar Sep 18 '24 18:09 pavermakov