使用fetch进行基本身份验证

问题描述 投票:62回答:6

我想用fetch写一个简单的基本身份验证,但我一直收到401错误。如果有人告诉我代码有什么问题,那会很棒:

let base64 = require('base-64');

let url = 'http://eu.httpbin.org/basic-auth/user/passwd';
let username = 'user';
let password = 'passwd';

let headers = new Headers();

//headers.append('Content-Type', 'text/json');
headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password));

fetch(url, {method:'GET',
        headers: headers,
        //credentials: 'user:passwd'
       })
.then(response => response.json())
.then(json => console.log(json));
//.done();

function parseJSON(response) {
return response.json()
}
javascript fetch-api
6个回答
69
投票

您在Basic和编码的用户名和密码之间缺少一个空格。

headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));

35
投票

没有依赖关系的解决方案。

headers.set('Authorization', 'Basic ' + Buffer.from(username + ":" + password).toString('base64'));

4
投票

您也可以使用btoa而不是base64.encode()。

headers.set('Authorization', 'Basic ' + btoa(username + ":" + password));

2
投票

如果您有一个后端服务器在应用程序之前要求基本身份验证凭据,那么这就足够了,它将重新使用,然后:

fetch(url, {
  credentials: 'include',
}).then(...);

0
投票

我将共享一个具有Basic Auth Header表单数据请求体的代码,

let username = 'test-name';
let password = 'EbQZB37gbS2yEsfs';
let formdata = new FormData();
let headers = new Headers();


formdata.append('grant_type','password');
formdata.append('username','testname');
formdata.append('password','qawsedrf');

headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password));
fetch('https://www.example.com/token.php', {
 method: 'POST',
 headers: headers,
 body: formdata
}).then((response) => response.json())
.then((responseJson) => {
 console.log(responseJson);

 this.setState({
    data: responseJson
 })
  })
   .catch((error) => {
 console.error(error);
   });

0
投票

NODE用户(REACT,EXPRESS)遵循这些步骤

  1. npm install base-64 --save
  2. import { encode } from "base-64";
  3. const response = await fetch(URL, { method: 'post', headers: new Headers({ 'Authorization': 'Basic ' + encode(username + ":" + password), 'Content-Type': 'application/json' }), body: JSON.stringify({ "PassengerMobile": "xxxxxxxxxxxx", "Password": "xxxxxxx" }) }); const posts = await response.json();
  4. 不要忘记将整个函数定义为async
© www.soinside.com 2019 - 2024. All rights reserved.