আনার সাথে প্রাথমিক প্রমাণীকরণ?


122

আমি আনতে একটি সাধারণ বেসিক প্রমাণীকরণ লিখতে চাই, তবে আমি 401 ত্রুটি পেতে থাকি getting যদি কেউ আমাকে কোডটির সাথে কী ভুল বলে দেয় তা দুর্দান্ত হবে:

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

উত্তর:


117

আপনি Basicএনকোডেড ব্যবহারকারীর নাম এবং পাসওয়ার্ডের মধ্যে একটি জায়গা মিস করছেন ।

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

8
জাভাস্ক্রিপ্টের স্পেসিফিকেশনের সাথে কি অটোব এবং বিটিওএ নির্মিত?
মার্টিন

6
2 টি ফাংশন সমস্ত বড় ব্রাউজারে উপলব্ধ, তবে আমি মনে করি না যে এগুলি কোনও ইএস স্পেসিফিকেশন দ্বারা আচ্ছাদিত। বিশেষ করে, আপনি তাদের Node.js পাবেন না github.com/nodejs/node/issues/3462
Lukasz Wiktor

নোট করুন যে এটি ব্রাউজারের জন্য একটি সেশন স্থাপন করে না। আপনি উভয়ই একটি অধিবেশন প্রতিষ্ঠার জন্য এক্সএইচআর ব্যবহার করতে পারেন এবং বেস 64 এনকোডিং এড়াতে পারেন। দেখুন: stackoverflow.com/a/58627805/333296
Nux

আনকড রেফারেন্স এরিয়ার: বেস 64 সংজ্ঞায়িত করা হয়নি
সুইভেন

@ সোভিন base64মূল পোস্টে আমদানিকৃত লাইব্রেরি বোঝায়। এটি বিল্ট-ইন গ্লোবাল নয়, একটি লাইব্রেরি যা সিজেএস মডিউলে আমদানি করা হয়েছিল।
অলিগোফ্রেন

90

নির্ভরতা ছাড়াই একটি সমাধান।

নোড

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

ব্রাউজার

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


1
বিশেষ চরিত্রগুলিকে সমর্থন করার মতো কিছু window.btoa(unescape(encodeURIComponent(string)));কাজ করা উচিত, আপনি এই সম্পর্কে এখানে আরও পড়তে পারেন: ডেভেলপার.মোজিলা.আর.এইন
ইউএস / ডকস / ওয়েবে / এপিআই / উইন্ডোবেস /

আপনার নোডের সংস্করণটির উপর নির্ভর করে fetchসেখানে উপস্থিত নেই।
dovidweisz

18

আপনি বেস 64.encode () এর পরিবর্তে btoa ব্যবহার করতে পারেন ।

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

১. শুধুমাত্র ব্রাউজারগুলিতে ২. কেবলমাত্র আসকি অক্ষর সহ।
লুকাস লাইসিস

7

অ্যাপ্লিকেশনটির আগে যদি আপনার ব্যাকএন্ড সার্ভারের কাছে বেসিক অথথ শংসাপত্রগুলির জন্য জিজ্ঞাসা করা হয় তবে এটি যথেষ্ট, এটি এটি আবার ব্যবহার করবে:

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

4

ক্রোম কনসোলে কপি-পেস্ট করার একটি সহজ উদাহরণ:

fetch('https://example.com/path', {method:'GET', 
headers: {'Authorization': 'Basic ' + btoa('login:password')}})
.then(response => response.json())
.then(json => console.log(json));

2

কোনও ব্যবহারকারীর (প্রতিক্রিয়া, এক্সপ্রেস) এই পদক্ষেপগুলি অনুসরণ করুন

  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


1

আমি এমন একটি কোড ভাগ করব যাতে বুনিয়াদি এথ শিরোনাম ফর্ম ডেটা রিকোয়েস্ট বডি,

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

এটি সরাসরি প্রাথমিক সমস্যার সাথে সম্পর্কিত নয়, তবে সম্ভবত কাউকে সাহায্য করবে।

ডোমেন অ্যাকাউন্ট ব্যবহার করে অনুরূপ অনুরোধ প্রেরণের চেষ্টা করার সময় আমি একই সমস্যার মুখোমুখি হয়েছিলাম। সুতরাং খনি সমস্যাটি লগইন নামে পালানো চরিত্রের মধ্যে ছিল না।

খারাপ উদাহরণ:

'ABC\username'

ভালো উদাহরণ:

'ABC\\username'

এটি কেবলমাত্র আপনার জেএস স্ট্রিং পলায়ন চরিত্রটি নিজেই পালাতে হবে কারণ এটি বুনিয়াদি লেখার সাথে সম্পর্কিত নয়।
কুনোম

@ কোমোন সঠিক সে কারণেই আমি উল্লেখ করেছি যে এটি সরাসরি সম্পর্কিত নয় তবে এটি সহায়ক হতে পারে।
ডিজে-গ্লোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.