Access Token не генерируется при расширении модели User и Access Token - Loopback 3 - PullRequest
1 голос
/ 09 мая 2019

Я новичок в loopback.Поэтому, как часть процесса обучения, началось создание примера API.Также расширены пользовательская модель как Customer и AccessToken как CustomerAccessToken.Но проблема в том, что токен доступа не генерируется, когда мы пытались войти в данные, которые уже отправлены с использованием запроса POST.

Тело ответа при входе с использованием учетных данных:

{
  "id": "oiMDjErGGVkeSMtnt1SfHzGuERZf6OCId5FUulvir6A04htUbIV656FOBlXn9vDS",
  "ttl": 1209600,
  "created": "2019-05-09T09:41:05.184Z",
  "userId": "5cd3f59594d45186b411bb02"
}

НетaccessToken генерируется.Я удалил встроенную модель User и AccessToken и использовал расширенные.

model-config.json

{
  "CustomerAccessToken": {
    "dataSource": "db",
    "public": false
  }
  "Customer": {
    "dataSource": "db",
    "public": true
  }
}

customer.json

"relations": {
    "accessTokens": { 
      "type": "hasMany",
      "model": "CustomerAccessToken",
      "foreignKey": "userId",
      "options": {
        "disableInclude": true
      }
    }
  }

customerAccessToken.json

{
  "name": "CustomerAccessToken",
  "base": "AccessToken",
  "properties": {},
  "validations": [],
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "Customer",
      "foreignKey": "userId"
    }
  },
  "acls": [],
  "methods": {}
}

Еще один запрос: сработает ли функция входа в систему, когда мы попытаемся расширить модели User & AccessToken или мне нужно написатьфункциональность входа в систему в файле customer.js, чтобы он работал.

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 15 мая 2019

Я следовал этому уроку. https://youtu.be/Jx39u8IssRg Я получил Token в теле ответа при входе в систему с помощью 'user' через пользовательский контроллер. Я могу поразить конечные точки модели дел, передав этот ' токен ' в заголовках как 'Bearer Token'. Я использовал " почтальон ", чтобы попасть в конечные точки дел (Мне не удалось вставить / прикрепить полученный токен в запросы на выполнение приложения loopback4)

0 голосов
/ 10 мая 2019

Не используйте CustomerAccessToken, если вы не хотите реализовать несколько пользовательских моделей.

Это конфигурация, которая отлично работает для меня:

model-config.json

{
  "User": {
    "dataSource": "mysql",
    "public": false
  },
  "AccessToken": {
    "dataSource": "mysql",
    "public": false,
    "relations": {
      "Customer": {
        "type": "belongsTo",
        "model": "Customer",
        "foreignKey": "userId"
      }
    }
  },
  "Customer": {
    "dataSource": "mysql",
    "public": true
  }
}

server.js

app.use(loopback.token({
  model: app.models.accessToken,
  currentUserLiteral: 'me'
}))

Модель клиента должна расширять модель пользователя:

customer.json

{
  "name": "Customer",
  "plural": "customers",
  "base": "User"
}
0 голосов
/ 10 мая 2019

В дополнение к Антонио Трапанис ответ. Если вы хотите использовать свою собственную модель AccessToken, чтобы установить ее в server.js

app.use(loopback.token({
  model: app.models.CustomerAccessToken,
}));
0 голосов
/ 09 мая 2019

Попробуйте использовать переменную DEBUG, чтобы получить более подробную информацию об ошибке. из корневого вызова обратной связи

export DEBUG=loopback:security:access-context
npm start

для запуска сервера в режиме отладки. Затем вы можете проверить, что именно происходит - какой метод вызывается и почему у вас нет доступа. Вероятно, это настройка ACL: по умолчанию вы не можете получить данные пользователей в петле, поэтому вы можете добавить правило ACL к сущности Customer. Для этого я предлагаю использовать loopback-cli - он менее подвержен ошибкам. Затем вы выбираете модель, в которую хотите добавить новое правило и следуя пошаговой инструкции. Вы можете узнать больше о ACL здесь

...