使用 Apollo-Client 对 GitHub API v4 进行身份验证

Posted

技术标签:

【中文标题】使用 Apollo-Client 对 GitHub API v4 进行身份验证【英文标题】:Authentication for GitHub API v4 with Apollo-Client 【发布时间】:2018-06-08 03:08:25 【问题描述】:

GitHub 的新 GraphQL API 需要使用令牌进行身份验证,就像以前的版本一样。那么,我们如何在Apollo-Client里面的HttpLink中添加一个'Header'信息呢?

const client = new ApolloClient(
  link: new HttpLink( uri: 'https://api.github.com/graphql' ),
  cache: new InMemoryCache()
);

【问题讨论】:

【参考方案1】:

更新 - 2021 年 10 月

使用@apollo/clientgraphql 包:

import  
  ApolloClient, 
  InMemoryCache, 
  gql, 
  HttpLink 
 from "@apollo/client";
import  setContext  from "@apollo/client/link/context";

const token = "YOUR_TOKEN";

const authLink = setContext((_,  headers ) => 
  return 
    headers: 
      ...headers,
      authorization: token ? `Token $token` : null,
    ,
  ;
);

const client = new ApolloClient(
  link: authLink.concat(
    new HttpLink( uri: "https://api.github.com/graphql" )
  ),
  cache: new InMemoryCache(),
);

client
  .query(
    query: gql`
      query ViewerQuery 
        viewer 
          login
        
      
    `,
  )
  .then((resp) => console.log(resp.data.viewer.login))
  .catch((error) => console.error(error));

原帖 - 2017 年 12 月

您可以使用apollo-link-context定义授权标头,检查the header section

将 apollo-client 用于 Github API 的完整示例如下:

import  ApolloClient  from 'apollo-client';
import  HttpLink  from 'apollo-link-http';
import  setContext  from 'apollo-link-context';
import  InMemoryCache  from 'apollo-cache-inmemory';
import gql from 'graphql-tag';

const token = "YOUR_ACCESS_TOKEN";

const authLink = setContext((_,  headers ) => 
  return 
    headers: 
      ...headers,
      authorization: token ? `Bearer $token` : null,
    
  
);

const client = new ApolloClient(
  link: authLink.concat(new HttpLink( uri: 'https://api.github.com/graphql' )),
  cache: new InMemoryCache()
);

client.query(
  query: gql`
    query ViewerQuery 
      viewer 
        login
     
    
  `
)
  .then(resp => console.log(resp.data.viewer.login))
  .catch(error => console.error(error));

【讨论】:

以上是关于使用 Apollo-Client 对 GitHub API v4 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

我可以将 useSWR 与 apollo-client 一起使用吗?

apollo-client, onError, ApolloProvider, client.writeData(localstate)... 当服务器返回 401 时如何处理对用户的身份验证

你如何动态控制 react apollo-client 查询启动?

如何将 localStorage 与 apollo-client 和 reactjs 一起使用?

使用 apollo-client + firebase auth 刷新令牌

使用 Apollo-Client 重新获取查询会引发错误