অ্যাকজিওসগুলি তার অনুরোধগুলিতে স্বয়ংক্রিয়ভাবে কুকিজ প্রেরণ করুন


121

আমি ক্লায়েন্টের কাছ থেকে অক্ষটি ব্যবহার করে আমার এক্সপ্রেস.জেএস সার্ভারে অনুরোধগুলি প্রেরণ করছি।

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

এটি আমার ক্লায়েন্টদের অনুরোধের উদাহরণ:

axios.get(`some api url`).then(response => ...

আমি আমার এক্সপ্রেস.জেএস সার্ভারে এই বৈশিষ্ট্যগুলি ব্যবহার করে শিরোনাম বা কুকিজ অ্যাক্সেস করার চেষ্টা করেছি:

req.headers
req.cookies

তাদের মধ্যে কোনও কুকি নেই। আমি কুকি পার্সার মিডওয়্যার ব্যবহার করছি:

app.use(cookieParser())

আমি কীভাবে অক্ষরগুলি স্বয়ংক্রিয়ভাবে অনুরোধগুলিতে কুকিজ প্রেরণ করব?

সম্পাদনা:

আমি ক্লায়েন্টের মতো কুকি সেট করেছি:

import cookieClient from 'react-cookie'

...
let cookie = cookieClient.load('cookie-name')
if(cookie === undefined){
      axios.get('path/to/my/cookie/api').then(response => {
        if(response.status == 200){
          cookieClient.save('cookie-name', response.data, {path:'/'})
        }
      })
    }
...

এটি অ্যাকজিওস ব্যবহার করার সময়, এটি প্রশ্নের সাথে প্রাসঙ্গিক নয়। কোনও কুকি সেট হয়ে গেলে আমি কেবল আমার সমস্ত অনুরোধগুলিতে কুকি এম্বেড করতে চাই।


1
আপনি কিভাবে ক্লায়েন্ট উপর কুকি সেট? কোডের উদাহরণটি দয়া করে দেখান :)
জুক বার নয়

@ টাজুকবারনয় প্রশ্নের সাথে যুক্ত কোড
কুনোক

কুকিগুলি সেট-কুকি সহ সার্ভার দ্বারা ক্লায়েন্ট দ্বারা সেট করা হয় না, আমার ধারণা আপনি ক্লায়েন্টের কুকি পড়ছেন। কুকি প্রোটোকল অনুসারে, ক্লায়েন্টটির কুকি সরবরাহকারী সার্ভারের অনুরোধে একটি কুকি শিরোনাম অন্তর্ভুক্ত করা উচিত।
হ্যানস পু

উত্তর:


241

আমার একই সমস্যা ছিল এবং withCredentialsসম্পত্তি ব্যবহার করে এটি ঠিক করেছিলাম ।

অনুরোধ করার পূর্বেCredentials সত্য হিসাবে সেট না করা হলে একটি আলাদা ডোমেনের XMLHttpRequest তাদের নিজস্ব ডোমেনের জন্য কুকি মান সেট করতে পারে না।

axios.get('some api url', {withCredentials: true});

8
আপনি যদি কোনও এক্সপ্রেস অ্যাপ্লিকেশনটিতে সংযোগ স্থাপনের চেষ্টা করছেন - আপনার করগুলি ব্যবহার করতে হবে এবং এই সেটিংসটি ব্যবহার করতে হবে। অনুরোধের উত্স প্রয়োজন। app.use (কর্স ({শংসাপত্র: সত্য, উত্স: ' লোকালহোস্ট: 8080 '}));
ডগকফি

17
মনে রাখবেন যে Access-Control-Allow-Originপ্রতিক্রিয়া শিরোনামটি ওয়াইল্ডকার্ড (*)
জেরি জাং তে

1
নিবন্ধন করুন আমি একই সমস্যার মুখোমুখি হয়েছি, যদি Access-Control-Allow-Originএটি সেট না করা হয় *তার অর্থ, আমি
সিআরএস

5
প্রতিক্রিয়াটির Access-Control-Allow-Originজন্য আপনি যে ডোমেন থেকে এক্সএইচআর অনুরোধ করতে চান তাতে সেট মানটির প্রয়োজন। যেমন https://a.comসার্ভার, https://b.comক্লায়েন্ট, এবং https://b.comকারও ব্রাউজারে লোড হয় এবং XMLHTTPRequestঅনুরোধ করতে ব্যবহার করা হয় https://a.com। সেট করার জন্য XMLHTTPRequest(শুরুতে https://a.com) ছাড়াও withCredential: true, সার্ভার - https://b.comএছাড়াও কনফিগার করা দরকার যাতে প্রতিক্রিয়া শিরোনামটি থাকেAccess-Control-Allow-Origin: https://a.com
জেরি ঝাং

আমার এই নিয়ে কিছুটা সমস্যা আছে ... আমার কাছে যদি ক্লায়েন্ট হিসাবে সার্ভার বি হিসাবে থাকে (যেমন, পৃষ্ঠাটি প্রতিক্রিয়া করুন), যদি আমি এটি সত্য হিসাবে সেট করি, এটি খ শংসাপত্রগুলি নয়, শংসাপত্র প্রেরণ করবে ... LOL। .. ঠিক আছে, এটা মজার কিছু নয়।
স্বর্ণড্রাগন 7007

24

টি এল; ডিআর:

{ withCredentials: true } অথবা axios.defaults.withCredentials = true


অক্ষগুলি ডকুমেন্টেশন থেকে

withCredentials: false, // default

withCredentials শংসাপত্র ব্যবহার করে ক্রস-সাইট অ্যাক্সেস-নিয়ন্ত্রণ অনুরোধ করা উচিত কিনা তা নির্দেশ করে

আপনি যদি { withCredentials: true }আপনার অনুরোধটি পাস করেন তবে এটি কাজ করা উচিত।

একটি ভাল উপায় সেটিং হবে withCredentialsযেমন trueমধ্যেaxios.defaults

axios.defaults.withCredentials = true


5
প্রতিটি অনুরোধের সাথে শংসাপত্রগুলি পাঠানো একটি খারাপ অভ্যাস। এই নিয়ন্ত্রণগুলি একটি কারণে রয়েছে। অন্য পরিষেবায় কথা বলা, আপনার সমস্ত কুকিজ প্রেরণ - সেগুলি ব্যবহার করা হয় কিনা তা শোষণের জন্য উপযুক্ত।
colm.anseo

2
@ কলমিনেটর কেবল কুকি যাদের সার্ভার ডোমেন তাদের ডোমেন হিসাবে প্রেরণ করা হবে। (ডিফল্টরূপে এগুলিকে কোনও সাবডোমেনে প্রেরণ করা হবে না এবং পাথের উপর ভিত্তি করে আরও ফিল্টারিং হতে পারে)) কার্যত আমরা কেবল সার্ভার কুকিজই প্রেরণ করছি যা সার্ভার দ্বারা সেট করা হয়েছিল।
M3RS

15

আমি অ্যাকজিওসের সাথে পরিচিত নই, তবে জাভাস্ক্রিপ্ট এবং এজাক্সে যতদূর জানি আমি এখানে একটি বিকল্পও পেয়েছি

withCredentials: true

এটি স্বয়ংক্রিয়ভাবে কুকিকে ক্লায়েন্ট-সাইডে প্রেরণ করবে। উদাহরণস্বরূপ, এই দৃশ্যটি পাসপোর্টজগুলি দিয়ে তৈরি করা হয়েছে যা সার্ভারে একটি কুকি সেট করে


11

এক্সপ্রেস সাড়াতে প্রয়োজনীয় হেডার সেট করাও গুরুত্বপূর্ণ important এরাই আমার পক্ষে কাজ করেছে:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', yourExactHostname);
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

এতে যুক্ত X-PINGOTHERকরা Access-Control-Allow-Headersআমার জন্য বাধ্যতামূলক করা হয়েছে (এক্সপ্রেস 4.16, ক্রোম 63 এর সাথে নোড.জেএস 6.9)। পরীক্ষা করে দেখুন JakeElder : এই GitHub বিষয়ে এর পোস্টে github.com/axios/axios/issues/191#issuecomment-311069164
তুহিন জেড

5

আর একটি সমাধান হ'ল এই গ্রন্থাগারটি ব্যবহার করা:

https://github.com/3846masa/axios-cookiejar-support

যা অক্ষের সাথে "টফ কুকি" সমর্থনকে সংহত করে। নোট করুন যে এই পদ্ধতির জন্য এখনও withCredentialsপতাকা প্রয়োজন ।


5

লোকেদের এখনও এটি সমাধান করতে সক্ষম নয়, এই উত্তরটি আমাকে সাহায্য করেছিল। স্ট্যাকওভারফ্লো উত্তর: 34558264

TLDR; {withCredentials: true}উভয় অক্ষর পাশাপাশি আনার জন্য একটিকে জিইটি অনুরোধ পাশাপাশি পোষ্ট অনুরোধ (কুকি পাওয়া) উভয়ই সেট করতে হবে ।


1
এটি অত্যন্ত গুরুত্বপূর্ণ। আমি আমার কোডটিতে এটি উপেক্ষা করেছি { withCredentials: true }এবং জিইটি অনুরোধে কেন কোনও প্রভাব ফেলেনি তা ভেবে বেশ ভাল সময় ব্যয় করেছি।
যোগম্যাক

1
খুবই গুরুত্বপূর্ণ! withCredentials: trueঅনুরোধ কনফিগারেশনে যুক্ত করার বিষয়ে অনেক আলোচনা রয়েছে তবে এই বিবরণটি নয়। আমি যতক্ষণ না
পেরে

4

আমি কীভাবে অক্ষরগুলি স্বয়ংক্রিয়ভাবে অনুরোধগুলিতে কুকিজ প্রেরণ করব?

সেট axios.defaults.withCredentials = true;

অথবা কিছু নির্দিষ্ট অনুরোধের জন্য আপনি ব্যবহার করতে পারেন axios.get(url,{withCredentials:true})

আপনার 'অ্যাক্সেস-কন্ট্রোল-অরিজিন-অরিজিন' ওয়াইল্ডকার্ড (*) এ সেট করা থাকলে এটি সিওআরএস ত্রুটি দেয়। সুতরাং আপনার অনুরোধের উত্সের url নির্দিষ্ট করে তা নিশ্চিত করুন

উদাহরণস্বরূপ: যদি আপনার ফ্রন্ট-এন্ড যা অনুরোধটি লোকালহোস্টে চালায়: 3000, তবে প্রতিক্রিয়া শিরোনাম হিসাবে সেট করুন

res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');

সেটও

res.setHeader('Access-Control-Allow-Credentials',true);

3

আপনি withCredentialsঅনুরোধে কুকি পাস করার জন্য সম্পত্তি ব্যবহার করতে পারেন ।

axios.get(`api_url`, { withCredentials: true })

সেট করে { withCredentials: true }আপনি ক্রস উত্স সমস্যা সম্মুখীন হতে পারে। এটি সমাধান করার জন্য আপনাকে ব্যবহার করা দরকার

expressApp.use(cors({ credentials: true, origin: "http://localhost:8080" }));

এখানে আপনি withCredentials সম্পর্কে পড়তে পারেন


2

আপনি দুটি মিশ্রিত হয়ে ভাবছেন।

আপনার কাছে "প্রতিক্রিয়া-কুকি" এবং "অডিওস" রয়েছে

প্রতিক্রিয়া-কুকি => ক্লায়েন্ট পক্ষের কুকি পরিচালনা করার জন্য

axios => সার্ভারে আজাক্স অনুরোধ প্রেরণের জন্য

এই তথ্যের সাথে, আপনি যদি ক্লায়েন্ট দিকের কুকিজগুলিও ব্যাকএন্ড পাশের সাথে যোগাযোগ করতে চান তবে আপনাকে সেগুলি একসাথে সংযুক্ত করতে হবে।

"প্রতিক্রিয়া-কুকি" রেডমি থেকে নোট:

আইসমোর্ফিক কুকি!

সার্ভার-রেন্ডারিং করার সময় ব্যবহারকারীর কুকিজ অ্যাক্সেস করতে সক্ষম হওয়ার জন্য, আপনি প্লাগটোরোকেস্ট বা সেটরউকুকি ব্যবহার করতে পারেন।

রিডমি লিঙ্ক

আপনার যদি এটি প্রয়োজন হয় তবে দুর্দান্ত।

যদি না হয়, দয়া করে মন্তব্য করুন যাতে আমি আরও বিশদভাবে বলতে পারি।


কী plugToRequestঠিক হবে? আমি নোড সার্ভারে কুকিজ অ্যাক্সেস করতে ভেবেছিলাম, সমস্ত একটি প্রয়োজন cookie-parserমিডওয়্যার (এক্সপ্রেস ধরে)?
জিওবয়

2

সুতরাং আমি এই একই সমস্যা ছিল এবং আমার জীবনের প্রায় 6 ঘন্টা হারিয়ে অনুসন্ধান, আমি ছিল

withCredentials: true

ব্রাউজারটি এখনও কুকিটি সংরক্ষণ করতে পারেনি যতক্ষণ না কোনও অদ্ভুত কারণে কনফিগারেশন সেটিংটি বদলানোর ধারণা আমার ছিল:

Axios.post(GlobalVariables.API_URL + 'api/login', {
        email,
        password,
        honeyPot
    }, {
        withCredentials: true,
        headers: {'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'
    }});

দেখে মনে হচ্ছে আপনার সর্বদা প্রথমে 'উইথড্রেনডিয়েন্টস' কী প্রেরণ করা উচিত।

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