AngularJS $ http, CORS এবং http প্রমাণীকরণ


87

কারণ অ্যাঙ্গুলারজেএস-এর সাথে সিওআরএস এবং এইচটিপি প্রমাণীকরণ ব্যবহার করা জটিল হতে পারে আমি একটি শেখা পাঠ ভাগ করে নেওয়ার জন্য প্রশ্নটি সম্পাদনা করেছি। প্রথমে আমি ইগরজগকে ধন্যবাদ জানাতে চাই। তার উত্তর আমাকে অনেক সাহায্য করেছিল। দৃশ্যপটটি নিম্নরূপ: আপনি AngularJS $ HTTP পরিষেবা সহ একটি অন্য ডোমেনে POST অনুরোধটি প্রেরণ করতে চান। অ্যাঙ্গুলারজেএস এবং সার্ভার সেটআপ পাওয়ার সময় সচেতন থাকার জন্য বেশ কয়েকটি কৌতূহলমূলক বিষয় রয়েছে।

প্রথম: আপনার অ্যাপ্লিকেশন কনফিগারেশনে আপনাকে অবশ্যই ক্রস ডোমেন কলের অনুমতি দিতে হবে

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  gonaumov@gmail.com for contacts and 
 *  suggestions. 
 **/ 
app.config(function($httpProvider) {
    //Enable cross domain calls
    $httpProvider.defaults.useXDomain = true;
});

দ্বিতীয়: আপনাকে অবশ্যই শংসাপত্রগুলি নির্দিষ্ট করতে হবে: অনুরোধে সত্য এবং ব্যবহারকারীর নাম এবং পাসওয়ার্ড।

 /**
  *  Cors usage example. 
  *  @author Georgi Naumov
  *  gonaumov@gmail.com for contacts and 
  *  suggestions. 
  **/ 
   $http({
        url: 'url of remote service',
        method: "POST",
        data: JSON.stringify(requestData),
        withCredentials: true,
        headers: {
            'Authorization': 'Basic bashe64usename:password'
        }
    });

Irdহির্ড: সার্ভার সেটআপ। আপনাকে অবশ্যই সরবরাহ করতে হবে:

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  gonaumov@gmail.com for contacts and 
 *  suggestions. 
 **/ 
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url.com:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");

প্রতিটি অনুরোধের জন্য। আপনি যখন বিকল্প পাবেন তখন আপনাকে অবশ্যই পাস করতে হবে:

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  gonaumov@gmail.com for contacts and 
 *  suggestions. 
 **/ 
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
   header( "HTTP/1.1 200 OK" );
   exit();
}

এইচটিটিপি প্রমাণীকরণ এবং সমস্ত কিছু তার পরে আসে।

এখানে পিএইচপি সহ সার্ভার সাইডের ব্যবহারের সম্পূর্ণ উদাহরণ।

<?php
/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  gonaumov@gmail.com for contacts and 
 *  suggestions. 
 **/ 
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
   header( "HTTP/1.1 200 OK" );
   exit();
}


$realm = 'Restricted area';

$password = 'somepassword';

$users = array('someusername' => $password);


if (isset($_SERVER['PHP_AUTH_USER']) == false ||  isset($_SERVER['PHP_AUTH_PW']) == false) {
    header('WWW-Authenticate: Basic realm="My Realm"');

    die('Not authorised');
}

if (isset($users[$_SERVER['PHP_AUTH_USER']]) && $users[$_SERVER['PHP_AUTH_USER']] == $password) 
{
    header( "HTTP/1.1 200 OK" );
    echo 'You are logged in!' ;
    exit();
}
?>

এই সমস্যাটি সম্পর্কে আমার ব্লগে একটি নিবন্ধ রয়েছে যা এখানে দেখা যায় ।


প্রশ্ন সম্পাদিত হয়।
জর্জি নওমভ

4
আমি কিছুটা বিভ্রান্ত, এটি কৌণিকরকম তবে আপনি এটি পিএইচপি ট্যাগগুলিতে জড়িয়ে পড়েছেন .... আমি কিছু মিস করেছি?
onaclov2000

এটি সার্ভার সাইড লজিকের একটি উদাহরণ। "Irdহিরড: সার্ভার সেটআপ" এর নীচের পাঠ্যটি সার্ভার সাইড লজিক।
জর্জি নওমভ

@ onaclov2000 AngularJS ক্লায়েন্টের পক্ষে। এটি যে কোনও সার্ভারের সাথে, পিএইচপি, রুবি, পার্ল, পাইথন, জাভা, জাভাস্ক্রিপ্টের সাথে কথা বলতে পারে ... আমি যেতে পারতাম ..
এরিক হোডনস্কি

4
এটি কি একটি প্রশ্ন? এটা আরো একটি ভাল উত্তর মত :) হল
মোহাম্মদ Kermani

উত্তর:


43

না আপনাকে শংসাপত্র রাখতে হবে না, আপনাকে ক্লায়েন্টের পক্ষের শিরোনাম রাখতে হবে যেমন:

 $http({
        url: 'url of service',
        method: "POST",
        data: {test :  name },
        withCredentials: true,
        headers: {
                    'Content-Type': 'application/json; charset=utf-8'
        }
    });

এবং সার্ভারে আপনাকে এইটিতে শিরোনাম রাখতে হবে উদাহরণস্বরূপ নোডেজের জন্য:

/**
 * On all requests add headers
 */
app.all('*', function(req, res,next) {


    /**
     * Response settings
     * @type {Object}
     */
    var responseSettings = {
        "AccessControlAllowOrigin": req.headers.origin,
        "AccessControlAllowHeaders": "Content-Type,X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5,  Date, X-Api-Version, X-File-Name",
        "AccessControlAllowMethods": "POST, GET, PUT, DELETE, OPTIONS",
        "AccessControlAllowCredentials": true
    };

    /**
     * Headers
     */
    res.header("Access-Control-Allow-Credentials", responseSettings.AccessControlAllowCredentials);
    res.header("Access-Control-Allow-Origin",  responseSettings.AccessControlAllowOrigin);
    res.header("Access-Control-Allow-Headers", (req.headers['access-control-request-headers']) ? req.headers['access-control-request-headers'] : "x-requested-with");
    res.header("Access-Control-Allow-Methods", (req.headers['access-control-request-method']) ? req.headers['access-control-request-method'] : responseSettings.AccessControlAllowMethods);

    if ('OPTIONS' == req.method) {
        res.send(200);
    }
    else {
        next();
    }


});

সাধারণভাবে সিওআরএস সহ, সার্ভারকে কি সমস্ত শিরোলেখগুলিকে (বিষয়বস্তু, সামগ্রী-দৈর্ঘ্য, রেফারার, ইত্যাদি ...) প্রকৃত উপস্থিত, অর্থাত-অপশনগুলি, অনুরোধের অনুমতি দিতে হবে?
কেভিন মেরেডিথ

@ কেভিনিমারডেথ না, আপনাকে সমস্ত শিরোলেখের অনুমতি দিতে হবে না, আপনি কেবল যা প্রয়োজন তা অনুমতি দিতে পারেন এবং আপনি এমনকি একটি ডোমেনেও সীমাবদ্ধ করতে পারেন।
igorzg

4
আমার কী দরকার তা আমি কীভাবে জানব?
কেভিন মেরেডিথ

আপনার উত্তরের উত্তরের জন্য ধন্যবাদ :)
কামরুজ্জামান

4
আমি বিভ্রান্ত হয়ে পড়েছি, কেন এটি কোনও HTTP মৌলিক প্রমাণীকরণ দ্বারা সুরক্ষিত হলে আমি শেষ পয়েন্টের সাথে প্রমাণীকরণের দরকার নেই?
ম্যাক্সিম জুবরেভ

3

একটি সিওআরএস অনুরোধ করার জন্য একজনকে অনুরোধের সাথে শিরোনাম যুক্ত করতে হবে একই সাথে তাকে অ্যাপাচে মোড_হেডার সক্ষম করা আছে কিনা তা যাচাই করতে হবে।

উবুন্টুতে শিরোলেখ সক্ষম করার জন্য:

sudo a2enmod headers

পিএইচপি সার্ভারের জন্য বিভিন্ন উত্স ব্যবহারের অনুরোধ গ্রহণ করতে:

Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.