Clifton Labrum
Clifton Labrum

Reputation: 14060

Realm Authentication Server Error with iCloud Auth

RealmSwift 2.8.3, Realm Object Server 1.8.1, Xcode 8, Swift 3.1

I can get pretty much everything with the Realm Object Server (ROS) to work with iCloud authentication, but I'm running into an issue when I have a new user authenticate that doesn't yet have an account on my ROS instance.

I'm successfully able to retrieve their iCloud token, but user is nil when I do this:

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 ---
    }
  } 
}

When I check the error log in my ROS (running on Ubuntu), I get this internal server error (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).

Now just to make sure, I assume that SyncCredentials.cloudKit(token: token) creates a user if that token isn't found on my server and returns a new user object. I don't see anything in the docs about creating a new user vs. authenticating an existing one.

UPDATE

I double-checked all my connections to iCloud, made sure my key_id found in my configuration.yml file is right and that my key matches what I have in my iCloud container.

Now I get a different error. :)

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).

Upvotes: 1

Views: 348

Answers (1)

Adam Smaka
Adam Smaka

Reputation: 6393

According to the docs, account should be created if not existed before

If the credentials are valid, the user is granted access to Realm Object Server. A new user account is created if the credentials are not coupled to an existing account.

I guess it's problem with private_key_path in configuration.yml. Try to move .pem file to another location and see if there are any changes.

Also, remember to restart the server after changing the configuration file.

Upvotes: 1

Related Questions