Ошибка сервера аутентификации Realm с аутентификацией iCloud

RealmSwift 2.8.3, сервер объектов Realm 1.8.1, Xcode 8, Swift 3.1

Я могу получить почти все с помощью Realm Object Server (ROS) для работы с аутентификацией iCloud, но у меня возникает проблема, когда у меня есть аутентификация нового пользователя, у которого еще нет учетной записи в моем экземпляре ROS.

Я успешно могу получить их токен iCloud, но user это nil, когда я делаю это:

let credentials = SyncCredentials.cloudKit(token: token)

SyncUser.logIn(with: credentials, server: serverURL) { user, error in
  DispatchQueue.main.async{
    if user == nil {
      //--- Error ---
      //This is where I end up. I can see the token in the log but no user object
    }else{
      //--- Success ---
    }
  } 
}

Когда я проверяю журнал ошибок в своей ROS (работающей на Ubuntu), я получаю эту внутреннюю ошибку сервера (500):

2017-07-12T00:39:39.170Z - warn: auth.cloudkit: Handle request failed with: Error: Request failed with code AUTHENTICATION_FAILED: Authentication failed.

2017-07-12T00:39:39.174Z - warn: [services] internal error: Error: Request failed with code AUTHENTICATION_FAILED: Authentication failed.
at request.catch.err (/usr/lib/nodejs/realm-object-server-developer/.build/src/node/managers/auth/provider/cloudkit.js:131:23)
at process._tickCallback (internal/process/next_tick.js:109:7).

Теперь, чтобы убедиться, я предполагаю, что SyncCredentials.cloudKit(token: token) создает пользователя, если этот токен не найден на моем сервере, и возвращает новый объект пользователя. Я не вижу в документации ничего о создании нового пользователя и аутентификации существующего.

ОБНОВЛЕНИЕ

Я дважды проверил все свои подключения к iCloud, убедился, что мой key_id, найденный в моем configuration.yml файле, правильный и что мой ключ соответствует тому, что у меня есть в моем контейнере iCloud.

Теперь у меня другая ошибка. :)

2017-07-12T01:12:54.801Z - warn: auth.cloudkit: Handle request failed with: TypeError: Cannot read property 'reason' of undefined

2017-07-12T01:12:54.809Z - warn: [services] internal error: TypeError: Cannot read property 'reason' of undefined
at signedRequest.then.catch.err (/usr/lib/nodejs/realm-object-server-developer/.build/src/node/managers/auth/provider/cloudkit.js:86:11)
at process._tickCallback (internal/process/next_tick.js:109:7).

person Clifton Labrum    schedule 12.07.2017    source источник
comment
Если вы видите internal errors на сервере объектов Realm, я предлагаю вам отправить отчет об ошибке вместе с подробными инструкциями для воспроизведения здесь: github.com/realm/realm-mobile-platform/issues/new   -  person jpsim    schedule 16.07.2017
comment
@jpsim Я подал один, но уже закрыл его, так как нашел (несвязанное) решение. Не стесняйтесь открывать снова и выводить более четкое сообщение об ошибке: github.com/realm/ realm-mobile-platform / issues / 237   -  person Clifton Labrum    schedule 18.07.2017
comment
как вы получаете токен icloud?   -  person Adam Smaka    schedule 18.07.2017
comment
@AdamSmaka Вот так: d.pr/n/O8rdQx+   -  person Clifton Labrum    schedule 19.07.2017


Ответы (1)


Согласно документам, учетная запись должна быть создана, если не существовала ранее

Если учетные данные действительны, пользователю предоставляется доступ к серверу Realm Object Server. Новая учетная запись пользователя создается, если учетные данные не связаны с существующей учетной записью.

Я думаю, это проблема с private_key_path в configuration.yml. Попробуйте переместить файл .pem в другое место и посмотрите, есть ли какие-либо изменения.

Также не забудьте перезапустить сервер после изменения файла конфигурации.

person Adam Smaka    schedule 19.07.2017
comment
Спасибо за ответ. Я нашел решение, как указано здесь: twelvesouth.com/wallpaper/collection5 Проблема была связана с неверный идентификатор ключа iCloud. - person Clifton Labrum; 21.07.2017