我想用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();

当前回答

get请求与授权的React原生移动应用程序,我已经花了更多的时间在fetch里面搜索这些行

 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>
           )}
         />

其他回答

get请求与授权的React原生移动应用程序,我已经花了更多的时间在fetch里面搜索这些行

 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和已编码的用户名和密码之间缺少一个空格。

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

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

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

节点用户(react, express)遵循这些步骤

NPM安装base-64 Import {encode} from "base-64"; const response = await (URL, { 方法:“文章”, headers: new headers ({ “授权”:“基本”+编码(用户名+“:”+密码), “内容类型”:“application / json” }), 身体:JSON.stringify ({ :“PassengerMobile xxxxxxxxxxxx”, “密码”:“xxxxxxx” }) }); Const posts = await response.json(); 不要忘记将整个函数定义为async

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

Node

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

浏览器

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