fetch를 사용한 기본 인증?
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();
의존 관계가 없는 솔루션.
노드
headers.set('Authorization', 'Basic ' + Buffer.from(username + ":" + password).toString('base64'));
브라우저
headers.set('Authorization', 'Basic ' + btoa(username + ":" + password));
사이에 공백이 없습니다.Basic
부호화된 사용자 이름과 패스워드를 지정합니다.
headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));
Chrome 콘솔에 복사 붙여넣기를 위한 간단한 예:
fetch('https://example.com/path', {method:'GET',
headers: {'Authorization': 'Basic ' + btoa('login:password')}})
.then(response => response.json())
.then(json => console.log(json));
또는 을 사용하여await
:
let response = await fetch('https://example.com/path', {method:'GET',
headers: {'Authorization': 'Basic ' + btoa('login:password')}});
let data = await response.json();
console.log(data);
순수 JavaScript에서는 부토아를 사용할 수도 있습니다.base64.encode()
:
headers.set('Authorization', 'Basic ' + btoa(username + ":" + password));
이것은 ASCII 문자만으로 동작하는 것에 주의해 주세요.
다른 인코딩을 처리해야 하는 경우 링크된btoa
문서를 참조해 주세요.
앱 전에 Basic Auth credentials를 요구하는 백엔드 서버가 있는 경우, 이것으로 충분합니다.그 다음, 이 서버가 다시 사용됩니다.
fetch(url, {
credentials: 'include',
}).then(...);
노드 사용자(React, Express)는 다음 단계를 따릅니다.
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
React Native Mobile 어플리케이션에 대한 권한 부여로 요청을 받습니다.이러한 행을 검색하는데 더 많은 시간을 소비했습니다.
var base64 = require("base-64"); // install it before use from npm i base-64
const uname = "some username goes here";
const pword = "some password goes here";
const getMovies = async () => {
try {
const response = await fetch(
"API URL goes here",
{
headers: {
Authorization: "Basic " + base64.encode(uname + ":" + pword),
},
}
);
data = await response.json();
setData(data);
console.log(data);
// console.log(data.name);
return data;
} catch (error) {
console.error(error);
} finally {
setLoading(false);
}
};
useEffect(() => {
getMovies();
}, []);
// other code
// inside return
<FlatList
keyExtractor={(item) => item.id}
data={data}
renderItem={({ item }) => (
<View style={styles.text_container}>
<Text>{item.name}</Text>
<Text>{item.images[0].name}</Text>
<Text>{item.images[0].src}</Text>
</View>
)}
/>
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);
});
이것은 초기 문제와는 직접적인 관계가 없지만 누군가에게 도움이 될 것입니다.
도메인 계정으로 비슷한 요청을 보내려다 같은 문제에 직면했습니다.그래서 나의 문제는 로그인 이름에 탈출하지 않은 글자로 되어 있었다.
나쁜 예:
'ABC\username'
좋은 예:
'ABC\\username'
언급URL : https://stackoverflow.com/questions/43842793/basic-authentication-with-fetch
'IT' 카테고리의 다른 글
오류 "1038 메모리가 부족합니다. 정렬 버퍼 크기를 늘리는 것을 고려하십시오. (0) | 2022.10.28 |
---|---|
네임스페이스 내에 클래스가 있는지 확인하는 방법 (0) | 2022.10.28 |
IntelliJ의 코드 커버리지 정보 클리어 (0) | 2022.10.28 |
static const와 const의 차이점은 무엇입니까? (0) | 2022.10.28 |
하나의 .js 파일에서 컴포넌트를 여러 파일로 분할합니다. (0) | 2022.10.28 |