Realm SyncUser.login не возвращает syncUser.current в Swift - PullRequest
0 голосов
/ 05 февраля 2020

Я регистрирую пользователя в глобальном мире. Для этого я использую функцию SyncUser.login, предоставленную в документах областей, но не выполняется ни один из кодов в обработчике завершения, и поэтому мое приложение продолжает падать как SyncUser.current == nil. Это код, который не работает:

SyncUser.logIn(with: .anonymous(), server: URL(string: "https://centralized-soft-chips.us1.cloud.realm.io")!) {
                (user, err) in
                if let _ = user {
                    // User is logged in
                    print("SUCCESS")
                } else if let error = err {
                    print("Error")
                    fatalError(error.localizedDescription)
                }
            }

Кто-нибудь сталкивался с этой проблемой, или они могут воссоздать ее?

1 Ответ

1 голос
/ 05 февраля 2020

Это общее предположение, потому что ваш код работает на меня.

Я думаю, что у вас два пользователя аутентифицированы одновременно. Это происходит с нами во время разработки, потому что приложение взломает sh и оставит пользователя аутентифицированным, а затем, когда мы сделаем изменение и повторно запустим, мы можем аутентифицировать другого пользователя et c et c.

Когда существует более одного пользователя с аутентификацией, вызов SyncUser.current вызовет sh.

Во-первых, я бы перевернул проверку ошибок таким образом, чтобы сначала перехватывать любые фатальные ошибки типа, возвращая, если это случается.

SyncUser.logIn(with: creds, server: Constants.AUTH_URL) { user, err in
    if let err = err {
        print(err.localizedDescription)
        return
    }

Попробуйте и посмотрите, выводит ли это какие-либо ошибки на консоль.

Я не знаю, откуда вызывается ваш код для входа, но вот что у нас на месте. Если приложение запускается, и с этого устройства выполняется авторизация нескольких пользователей, мы просто выходим из него и затем переходим к логину

override func viewDidAppear() {
    super.viewDidAppear()

    let count = SyncUser.all.count
    if count > 1 {
        for userDict in SyncUser.all {
            let user = userDict.value as! SyncUser
            user.logOut()
        }
    }

    if let _ = SyncUser.current {
        print("user already logged in")
        self.finishLogin()
    } else {
        print("logging in a user")
        self.handleLoginAction()
    }
}

SyncUser.all словарь всех действующих, зарегистрированных в системе идентификаторов пользователей, соответствующих их объектам SyncUser.

Опять же, это общее предположение - пожалуйста, оставляйте комментарии, если появится какая-либо дополнительная информация, и я обновлю (или удалю) ответьте соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...