У меня есть база данных реального времени в моем приложении Angular, и я использую Firebase. Я пытаюсь получить данные с токеном, прикрепленным в качестве параметра в моем запросе, как показано в Документах Firebase для RestAPI.
Однако, когда я прикрепляю токен к данным, я получаю обратно 401 error
"could not parse auth token"
.
Я пробовал этот запрос внутри и снаружи моего кода только для получения одинакового результата.
Токен аутентификации исходит непосредственно от AngularFireAuth
, который был создан в моем AuthService
при регистрации:
activeUser = new BehaviorSubject<User>(null);
...
signup(email: string, password: string, name: string) {
return this.firebaseAuth.auth
.createUserWithEmailAndPassword(email, password)
.then(res => {
res.user.updateProfile({
displayName: name
});
this.handleAuthentication(
res.user.email,
res.user.uid,
res.user.displayName,
res.user.refreshToken
);
return res;
});
}
handleAuthentication(
email: string,
uid: string,
displayName: string,
token: string
) {
const user = new User(email, uid, displayName, token);
this.activeUser.next(user);
}
...
Итак, я создаю пользователя с AngularFireAuth, а затем использую .next
на BehaviorSubject
из activeUser
, чтобы добавить пользователя с адресом электронной почты, uid, токеном и отображаемым именем. Этот токен затем используется в функции fetchWorkouts()
для получения данных из базы данных.
Мой текущий код:
fetchWorkouts() {
return this.authService.activeUser.pipe(
take(1),
exhaustMap(activeUser => {
return this.http.get<Workout[]>(
"https://velo-coach-app.firebaseio.com/workouts.json?auth=" + activeUser.token
);
}),
...
}
Я также пробовал:
fetchWorkouts() {
return this.authService.activeUser.pipe(
take(1),
exhaustMap(activeUser => {
return this.http.get<Workout[]>(
"https://velo-coach-app.firebaseio.com/workouts.json",
{
params: new HttpParams().set('auth', activeUser.token)
}
);
);
}),
...
}
Я также попытался просто вставить весь токен в браузер: https://myapp.firebase.io/workouts.json?auth=MYTOKEN
. Все это приводит к одной и той же проблеме: { "error" : "Could not parse auth token." }
Когда я отправляю запрос Firebase, чтобы вернуть некоторые тренировки с таким запросом: https://myapp.firebase.io/workouts.json?auth=MYTOKEN
, независимо от того, как я отправляю запрос, кажется, всегда возвращайте одну и ту же ошибку.
Правила моей базы данных реального времени следующие:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Если я изменю эти правила на:
{
"rules": {
".read": true,
".write": true
}
}
и полностью удалим токен в моем запросе http, тогда это работает. Вопрос только в том, когда эти правила включены, и я прикрепляю токен к запросу API.
Есть что-то, чего мне здесь не хватает? Все вопросы StackOverflow, задающие что-то похожее на это, либо остаются без ответа, частично отвечают, но не работают, либо используют устаревшие секреты базы данных.