php - Laravel الحصول على رؤوس الطلبات



oauth-2.0 (3)

الجواب من dschniepp هو الصحيح ، ولكن لدي مشاكل مع هذا أيضا. عليك أن تفعل شيئين:

  1. تحقق مما إذا كان mod_rewrite متاحًا وتم تنشيطه.
  2. قم بتحديث ملف .htaccess في Laravel ، الموجود في المجلد العام.

في النقطة الأولى ، عليك التحقق مما إذا كانت وحدة "mod_rewrite" متوفرة من خلال وظيفة php_info ، في ملف php منفصل. ثم إذا كان متاحا لديك لتنشيطه ، وهذا يعتمد على تكوين خادم الويب الخاص بك ، في مربع بلدي Nitrous أضفت هذه السطور إلى ملف httpd.conf الخاص بي:

<IfModule mod_rewrite>
   RewriteEngine On
</IfModule>

أو يمكنك تنشيط الوحدة في ملف .htaccess أيضًا:

RewriteEngine On

ثم في نفس الملف .htaccess الموجود في المجلد العام في جذر تطبيق laravel ، لديك لإضافة هذه الخطوط:

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

عملت هذه الخطوط بالنسبة لي. يجب أن يظهر ملف .htaccess على النحو التالي:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

وهذا كل شيء ، يجب أن يكون لديك رأس Authorization في صفيف Request (header ()). فقط لتوضيح هذه مشكلة مع Apache ، وليس مع Laravel نفسه.

https://code.i-harness.com

أستخدم POSTMAN لإرسال طلب GET إلى واجهة برمجة التطبيقات يحتوي على عنوان يحتوي على تفويض.

أعلم أن رأس البيانات يعمل لأنه إذا لم يُرجع المسار خطأ 401.

أردت الحصول على رأس التخويل كما يلي:

$access_token = Request::header('Authorization');

ولكن لاحظت أنه إرجاع NULL.

لذلك حاولت التقاط القيم مع:

die(var_dump(Request::header()));

ولاحظت أنه لا يحتوي على أي رأس تفويض. مجرد استضافة لرؤوس ملفات تعريف الارتباط.

تحديث

يجب الحصول على Authorization: Bearer ACCESS TOKEN


في Laravel 5.5 يمكنك قراءة الرعاة باستخدام apache_request_headers ببساطة قراءتها في وحدة التحكم الخاصة بك عن طريق الخطوط التالية

$headers = apache_request_headers();
dd($headers['Authorization']);

تأكد من أنك قد أضفت استخدام Illuminate \ Http \ Request؛ في وحدة التحكم الخاصة بك


نشر هذا هنا لأنه حل مشكلتي. وهذا ينطبق على النطاقات الفرعية ولكن من الواضح أنه يمكن ضبطه للنطاقات العادية أيضًا. طبقت هذا داخل ملف مساراتي في الأعلى.

$newUrl = '';
try{
    $urlParts = parse_url($_SERVER['HTTP_REFERER']) ?? '';
    $newUrl = $urlParts['scheme'] . "://" . $urlParts['host'];
    if(!stristr($newUrl, '.yourdomain.com')){
        $newUrl = 'false';
    }
}catch(Exception $e)
{}
header('Access-Control-Allow-Origin: ' . $newUrl);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: access-control-allow-origin,cache-control,content-type,postman-token');




oauth-2.0