0

会社のモバイル アプリケーション用に Realm Object Server をセットアップしようとしています。ユーザーがデータベースにアクセスできるようにするには、カスタム認証を使用する必要があります。

import { BasicServer } from 'realm-object-server'
import * as path from 'path'
import { AuthProvider } from './lib/auth'

const server = new BasicServer()

server.start({
  dataPath: path.join(__dirname, '../data'),
  address: '192.168.0.24',
  authProviders: [new AuthProvider()]
 })
 .then(() => {
    console.log(`Realm Object Server was started on ${server.address}`)
 })
 .catch(err => {
    console.error(`Error starting Realm Object Server: ${err.message}`)
 })

これが、適用する必要があるカスタム認証です。認証は別のバックエンド サーバーによって行われます。

import { post } from 'superagent'
import { auth, User, errors } from 'realm-object-server'
import { pick } from 'lodash';

export class AuthProvider extends auth.AuthProvider {

  name = 'authprovider'

  authenticateOrCreateUser(body: any): Promise<User> {
   return post('https://XYZ/signin')
  .send({
    'email': body.user_info.email,
    'password': body.user_info.password
  })
  .then((successResponseJSON: any) => {
    return this.service.createOrUpdateUser(
      successResponseJSON.body.id,
      this.name, // this is the name of the provider,
      false, // this is if the user should or should not be an admin
      pick(successResponseJSON.body, ['id', 'email'])
    )
  })
  .catch(err => {
    throw new errors.realm.InvalidCredentials({ detail: err })
  })
 }
}

レルム サーバーにデータを追加するために、レルムによって提供されるサンプルにカスタム認証のコードを追加しました。ここでは、「authprovider」を使用してユーザーを認証するように求めています

var URL = "192.168.0.24:9080"

Realm.Sync.User.registerWithProvider(`http://${URL}`, {
provider: 'authprovider',
providerToken: null,
userInfo: {
  email: username,
  password: password
}
 }).then(user => {
console.log('user', user, user.identity)
Realm.open({
  sync: {
    url: `realm://${URL}/abc`,
    user: user
  },
  schema: [TickerSchema],
})

ユーザーが正常に認証されても、アクセス拒否エラーが発生します。理由がわかりません。

user User {} 9ae6033cd9b55e3aca62a291af8726ea
Unhandled session token refresh error { Error: The path is invalid or current user has no access.
at new AuthError (/home/sukumar/code_snippets/realm-test/node_modules/realm/lib/errors.js:22:25)
at performFetch.then.then (/home/sukumar/code_snippets/realm-test/node_modules/realm/lib/user-methods.js:105:29)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
name: 'AuthError',
message: 'The path is invalid or current user has no access.',
stack: 'Error: The path is invalid or current user has no access.\n    at new AuthError (/home/sukumar/code_snippets/realm-test/node_modules/realm/lib/errors.js:22:25)\n    at performFetch.then.then (/home/sukumar/code_snippets/realm-test/node_modules/realm/lib/user-methods.js:105:29)\n    at <anonymous>\n    at process._tickCallback (internal/process/next_tick.js:188:7)',
type: 'https://realm.io/docs/object-server/problems/access-denied',
title: 'The path is invalid or current user has no access.',
status: 403,
code: 614 }
4

1 に答える 1