Я пытаюсь создать проекты GCP из API «Cloud Resource Manager».
В документации https://cloud.google.com/resource-manager/reference/rest/v1/projects/create Я тестирую API с помощью проводника API и работает нормально, но когда я попытаюсь разработать в моем Angular 8 с angularfire проект, пришлите мне ошибку ниже:
error: {
code: 401
message: "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project."
status: "UNAUTHENTICATED"
}
Мой код:
// this triggers the Google OAuth2 popup
async getToken() {
const provider = new auth.GoogleAuthProvider();
var credential = await this.afAuth.auth.signInWithPopup(provider)
var token = await this.afAuth.auth.currentUser.getIdTokenResult(false)
localStorage.setItem('tokenId', token.token)
return
}
//in this code I save some information in the database,
//then continue with the process to create a new project
async saveAgent(agente: AgenteModel) {
const token = await this._auth.getToken()
//<<<... more code ...>>>
await this.createProject(agente, token).toPromise()
}
//in this block I post to the API and is when the code crashs
createProject(agente: AgenteModel, token): Observable<any>{
var headers = new HttpHeaders({
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'Authorization': `Bearer ${token}`,
})
// * Asignar datos del proyecto
const body = {
"name": agente.displayName,
"projectId": agente.agenteId,
"labels": {
"agenteMii": agente.agenteId
}
}
return this._http.post('https://cloudresourcemanager.googleapis.com/v1/projects',body, {headers: headers})
}
... и я тоже пытаюсь установить токен с перехватчиком, но он не работает, или я не знаю, как его использовать
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token: string = localStorage.getItem('tokenId')
if (token) {
req.clone({
headers: new HttpHeaders({
'Authorization': `Bearer ${token}`
})
})
}
return next.handle(req).pipe(tap(
// * Muestra el evento
(next: HttpEvent<any>) => {
if (next instanceof HttpResponse) { console.log(event) }
},
// ! Muestra el error
(err: any) => {
if (err instanceof HttpErrorResponse) { console.warn(err) }
},
),
)
}