Ответ 1
Вам не хватает пробела между Basic
и закодированным именем пользователя и паролем.
headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));
Я хочу написать простую базовую аутентификацию с 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()
}
Вам не хватает пробела между Basic
и закодированным именем пользователя и паролем.
headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));
Решение без зависимостей.
Узел
headers.set('Authorization', 'Basic ' + Buffer.from(username + ":" + password).toString('base64'));
Browser
headers.set('Authorization', 'Basic ' + btoa(username + ":" + password));
Вы также можете использовать btoa вместо base64.encode().
headers.set('Authorization', 'Basic ' + btoa(username + ":" + password));
Если у вас есть внутренний сервер, запрашивающий учетные данные базовой аутентификации перед приложением, то этого достаточно, он будет использовать его затем:
fetch(url, {
credentials: 'include',
}).then(...);
Я поделюсь кодом, который имеет тело запроса данных формы 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);
});
ПОЛЬЗОВАТЕЛИ NODE (РЕАГИРУЙТЕ, ВЫРАЖАЙТЕ) ПОСЛЕ ЭТИХ ШАГОВ
npm install base-64 --save
import { encode } from "base-64";
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();
Не забудьте определить всю эту функцию как async