首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Google登录通过Firebase登录后访问教室api

如何在使用Google登录通过Firebase登录后访问教室api
EN

Stack Overflow用户
提问于 2020-05-31 11:32:44
回答 1查看 396关注 0票数 0

我已经创建了一个统一的应用程序来登录使用谷歌和访问谷歌教室api。登录是成功的,范围也允许进入课程。

问题:如何在使用firebase登录后查询。端点:https://classroom.googleapis.com/v1/courses/105459102203方法:获取参数: CourseId,我已经有了

BearerToken:如何从防火墙中检索?

当我尝试使用auth代码和/或idToken时,会出现以下错误:

{“错误”:{“代码”:401,“消息”:“请求具有无效的身份验证凭据。预期的OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。参见https://developers.google.com/identity/sign-in/web/devconsole-project。”,“状态”:“未经身份验证”}}

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-11-02 20:30:25

有许多方法可以通过firebase成功地发出API请求,尤其是Google:

  1. 困难的方法是为firebase.UserCredentials创建一个HttpInterceptor,并将其传递给每个HttpRequest的头部,如下所示:

代码语言:javascript
复制
headers: new HttpHeaders(
      {
        'Content-Type': 'application/json',
        Authorization: `Bearer [${this.user$.AccessToken}]`
      })

这就是我所称的困难方式,因为您必须确保传递和刷新每个API服务的令牌。

  1. 使用javascript库"gapi“登录客户端,然后使用令牌响应作为凭证登录Firebase。本文创建了一个纯OAuth2登录名,用于Firebase和进一步的Google请求,如下所示:

代码语言:javascript
复制
declare var gapi;
/** Initialize Google API Client */
initClient(): void {
  gapi.client.init({
    apiKey: environment.firebaseConfig.apiKey,
    clientId: environment.firebaseConfig.clientId,
    discoveryDocs: environment.firebaseConfig.discoveryDocs,
    scope: environment.firebaseConfig.scope,
    });
}
/** Do a OAuth login and then pass it to a FirebaseAuth service */
  async login() {
      const googleAuth = gapi.auth2.getAuthInstance();
      const googleUser = await googleAuth.signIn();
      const token = googleUser.getAuthResponse().id_token;
      const credential = firebase.auth.GoogleAuthProvider.credential(token);
      await this.afAuth().signInAndRetrieveDataWithCredential(credential);
  }
/** Then you're ready to make a request*/
/**
   * Lists all course names and ids.
   * Print the names of the first 10 courses the user has access to. If
   * no courses are found an appropriate message is printed.
   */
  listCourses() {
    this.courses$ = 
      gapi.client.classroom.courses.list({pageSize=10;}).then(response => {
      return from<Course[]>(response.result.courses);
    });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62115572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档