Node.js 如何像使用axios auth选项一样通过apollo客户端传递应用程序凭据

Node.js 如何像使用axios auth选项一样通过apollo客户端传递应用程序凭据,node.js,graphql,axios,react-apollo,apollo-client,Node.js,Graphql,Axios,React Apollo,Apollo Client,我想知道如何像在axios中一样,通过代码将应用程序凭据甚至用户凭据传递给apollo客户端 在axios中- const data = await axios({ method: "POST", url: `${SOME_URL}`, auth: { username: USER, //like this// password: PASS, }, data: req.body, headers: { Accept: "application/json

我想知道如何像在axios中一样,通过代码将应用程序凭据甚至用户凭据传递给apollo客户端

在axios中-

const data = await axios({
  method: "POST",
  url: `${SOME_URL}`,
  auth: {
    username: USER,   //like this//
    password: PASS,
  },
  data: req.body,
  headers: { Accept: "application/json" },
});
对于apollo客户端,我使用了apollo链接http,我的设置如下所示-

import fetch from "unfetch";
import { ApolloClient } from "apollo-client";
import { from } from "apollo-link";
import { onError } from "apollo-link-error";
import { createHttpLink } from "apollo-link-http";

const client = new ApolloClient({
  link: from([errorLink, standardVariablesLink, typenameCleanerLink, createHttpLink({ uri: "https://graphql-backend/graphql", fetch })]),
  cache,
});
我已尝试将createHttpLink对象添加为凭据:${USER}:${PASS}或对象

credentials: {
  user: USER,
  password: PASS
}
但那没用

谢谢你的帮助。谢谢

问题: axios中的这个身份是什么。。。一点搜索:基本的身份验证选项!axios在内部将其转换为标头

阿波罗的客户不是很好。。。您需要将参数转换为标头本身,并使用以下方法:

 const link = createHttpLink({   
   headers: {     
     authorization: "Basic btoa_converted_username_password";   
   }, 
问题: axios中的这个身份是什么。。。一点搜索:基本的身份验证选项!axios在内部将其转换为标头

阿波罗的客户不是很好。。。您需要将参数转换为标头本身,并使用以下方法:

 const link = createHttpLink({   
   headers: {     
     authorization: "Basic btoa_converted_username_password";   
   }, 
axios中的auth选项只是一种构造应用程序的简写方式。要构造要包含在标头中的凭据值,请执行以下操作:

用户名和密码与冒号aladdin:opensesame组合在一起。 生成的字符串是base64编码的YWXHZGRPBJPCGVUC2VZYW1L。 因此,您可以执行以下操作:

createHttpLink({
  uri: '...',
  headers: {
    Authorization: `Basic ${window.btoa(`${username}:${password}`)}`,
  }
})
如果您在Node.js中运行此代码,您将使用以下代码而不是btoa:

另外请注意,如果此代码运行的是客户端,您可能希望通过使用动态注入头。

axios中的auth选项只是一种构造头文件的简写方法。要构造要包含在标头中的凭据值,请执行以下操作:

用户名和密码与冒号aladdin:opensesame组合在一起。 生成的字符串是base64编码的YWXHZGRPBJPCGVUC2VZYW1L。 因此,您可以执行以下操作:

createHttpLink({
  uri: '...',
  headers: {
    Authorization: `Basic ${window.btoa(`${username}:${password}`)}`,
  }
})
如果您在Node.js中运行此代码,您将使用以下代码而不是btoa:


另外请注意,如果此代码运行的是客户端,您可能希望使用动态注入标题。

@xadm我已经搜索文档一周了,但找不到任何与之相关的内容。取而代之的是,有人建议使用cookies,但这不是我可以选择的。其他建议的方法,我已经尝试过了,但没有像我在问题中提到的那样有效。@xadm是的,有效。谢谢你能添加一个答案让我投票并接受吗?@xadm我已经搜索文档一周了,但找不到任何与之相关的内容。取而代之的是,有人建议使用cookies,但这不是我可以选择的。其他建议的方法,我已经尝试过了,但没有像我在问题中提到的那样有效。@xadm是的,有效。谢谢你能补充一个答案让我投票接受吗?再次感谢。我不知道axios将这些授权选项改为普通授权标题。再次感谢。我不知道axios将这些身份验证选项改为普通授权标题。谢谢,解决了这个问题。我在客户端使用它,有没有一种方法可以使那些经过base64编码的字符串不会出现在“网络”选项卡或其他内容的标题中,因为如果有人从那里获取它,它可以用来获取凭据。在开发客户端应用程序时,您不应该在代码中嵌入任何凭据,句号,因为你的代码是公开的,任何人都可以阅读。如果您将基本身份验证用作客户端应用程序的一部分,那么用户应该以某种方式提供凭据。即使在那时,甚至当通过HTTPS完成时,。谢谢,解决了这个问题。我在客户端使用它,有没有一种方法可以使那些经过base64编码的字符串不会出现在“网络”选项卡或其他内容的标题中,因为如果有人从那里获取它,它可以用来获取凭据。在开发客户端应用程序时,您不应该在代码中嵌入任何凭据,句号,因为你的代码是公开的,任何人都可以阅读。如果您将基本身份验证用作客户端应用程序的一部分,那么用户应该以某种方式提供凭据。即使在那时,甚至在通过HTTPS完成时。