首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用阿波罗-client+ firebase auth刷新令牌

使用阿波罗-client+ firebase auth刷新令牌
EN

Stack Overflow用户
提问于 2019-07-23 11:42:50
回答 1查看 1.1K关注 0票数 1

在使用阿波罗客户端和消防基地的auth服务时,我很难弄清楚令牌刷新。

我以前用阿波罗客户端设置过令牌刷新。通常我使用阿波罗链接错误包(阿波罗-链接错误文档).

我的理解是,你从消防基地得到了最新的令牌,并承诺如下:

firebase.auth().currentUser.getIdToken

如何使用Firebase refreshToken进行重新身份验证?

这个职位读答案

当您从浏览器调用时,.getIdToken(true)将自动刷新您的令牌。

根据我上面的阅读,我想出了下面的片段

代码语言:javascript
复制
import { onError } from 'apollo-link-error';
import { Observable } from 'apollo-link'; // <-- Add Observable
import firebase from 'lib/firebase';

const errorLink = onError(
  ({ graphQLErrors, networkError, operation, forward }) => {

    let accessToken = window.localStorage.getItem('access_token');

    if (graphQLErrors) {
      // User access token has expired
      if (graphQLErrors[0].message.includes('Signature has expired')) {

        if (accessToken && accessToken !== 'undefined') {

          // Let's refresh token through async request
          return new Observable(observer => {
            firebase
              .auth()
              .currentUser.getIdToken(true)
              .then(function(idToken) {
                if (!idToken) {
                  window.localStorage.removeItem('access_token');
                  return console.log('Refresh token has expired');
                }

                window.localStorage.setItem('access_token', idToken);

                // reset the headers
                operation.setContext(({ headers = {} }) => ({
                  headers: {
                    // Re-add old headers
                    ...headers,
                    // Switch out old access token for new one
                    'login-token': idToken || null
                  }
                }));
                const subscriber = {
                  next: observer.next.bind(observer),
                  error: observer.error.bind(observer),
                  complete: observer.complete.bind(observer)
                };

                // Retry last failed request
                forward(operation).subscribe(subscriber);
              })
              .catch(error => {
                // No refresh or client token available, we force user to login
                observer.error(error);
              });
          });
        }
      }
    }
  }
);

export default errorLink;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-23 13:56:29

上面的代码实际上有效!

我的问题是:

if (graphQLErrors[0].message.includes('Signature has expired')) {

我的服务器的错误消息实际上是“令牌过期了”。我改变了我的如果声明以上,一切都很好!

我没有找到太多的例子阿波罗-客户+火力基地- auth在线,所以希望这个面包屑可以帮助其他人时,阿波罗客户端和火基地auth。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57163454

复制
相关文章

相似问题

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