Я прочитал тонны сообщений stackoverflow и docs , но мне все еще что-то не хватает. Я использую базу данных Firebase в реальном времени. Если я устанавливаю правила всегда true (аутентификация не требуется) и удаляю перехватчик, все работает нормально. После добавления перехватчика и расширения запросов к Firebase:
- параметр запроса
?auth_token=<token here>
- заголовок
Authorization: Bearer <token here>
Я получаю 401 ошибка (Несанкционированный запрос.). Похоже, мой auth_token по какой-то причине неверен. Любая идея, почему и как это исправить?
Заранее спасибо!
Код ниже:
Служба аутентификации
import 'firebase/auth';
import 'firebase/database';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import * as firebase from 'firebase/app';
import { environment } from './../../environments/environment';
@Injectable({
providedIn: 'root'
})
export class AuthService {
public user: firebase.User;
public token: string;
constructor(private router: Router) {
this.initFirebase();
}
initFirebase() {
firebase.initializeApp({
apiKey: environment.firebase.apiKey,
databaseURL: environment.firebase.databaseURL
});
const auth = firebase.auth();
auth.onAuthStateChanged(firebaseUser => {
this.user = firebaseUser;
if (firebaseUser) {
firebaseUser.getIdToken().then(token => this.token = token);
} else {
this.token = null;
}
});
}
}
Перехватчик Firebase (пробовал предоставление токена аутентификации в виде: заголовка или параметра запроса)
import { HttpHandler, HttpInterceptor, HttpParams, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { AuthService } from './auth.service';
@Injectable()
export class FirebaseAuthInterceptorService implements HttpInterceptor {
constructor(private auth: AuthService) {}
intercept(request: HttpRequest<any>, next: HttpHandler) {
if (request.url.indexOf('firebaseio.com') === -1 || !this.auth.user) return next.handle(request);
const params = new HttpParams();
params.append('access_token', this.auth.token);
const newRequest = request.clone({
// headers: request.headers.append('Authorization', 'Bearer ' + this.auth.token)
setParams: {
access_token: this.auth.token
}
});
return next.handle(newRequest);
}
}