使用 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/client
和graphql
包:
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 一起使用?