Поток аутентификации Nebular (ngx-admin) через API GraphQL
Как выполнить проверку подлинности через API GraphQL в приложении ngx-admin/Nebular?
Я нахожу в наличии AuthStrategy
классы ограничены, и нет простого способа изменить их поведение. Ближайший NbPasswordAuthStrategy
, который выполняет HTTP-запрос, но я не понял, как использовать его с API-интерфейсом GraphQL.
2 ответа
В качестве обходного пути для получения аутентификации через API GraphQL, я подкласс NbLoginComponent
и перезаписать это login()
метод, передавая правильную полезную нагрузку запроса GraphQL NbAuthService.authenticate()
Например:
login(): void {
this.errors = []
this.messages = []
this.submitted = true
const data = {
variables: this.user,
query: 'mutation($username: String!, $password: String!) { login(username: $username, password: $password) { token } }',
}
this.service.authenticate(this.strategy, data).subscribe((result: NbAuthResult) => {
this.submitted = false
if (result.isSuccess()) {
this.messages = result.getMessages()
} else {
this.errors = result.getErrors()
}
const redirect = result.getRedirect()
if (redirect) {
setTimeout(() => {
return this.router.navigateByUrl(redirect)
}, this.redirectDelay)
}
this.cd.detectChanges()
})
}
На данный момент, аутентификация через GraphQL
не доступен из коробки. Чтобы решить эту проблему, вам нужно создать новую стратегию, такую как NbPasswordAuthStrategy
но ваша новая стратегия будет делать запросы с GraphQL
клиент вместо жалобы HttpClient
,