鍍金池/ 問答/PHP  網(wǎng)絡安全/ laravel passport 使用 javascript 調(diào)用接口出現(xiàn) 30

laravel passport 使用 javascript 調(diào)用接口出現(xiàn) 302 重定向錯誤如何解決??

使用 laravel passport 作為 api 認證。使用授權碼方式已經(jīng)申請到了有效token

postman 中運行正常:

clipboard.png

通過 javascript 訪問的時候卻出現(xiàn)了問題!

clipboard.png

clipboard.png

javascript 代碼如下:

clipboard.png

我表示特別無語,為什么 postman 使用 token 都正常,然后 javascript 使用 token 訪問卻認證不成功進行了重定向?。?/p>

回答
編輯回答
別硬撐

當請求包含自定義請求頭(有的時候Authorization也被算是自定義頭)的時候, 瀏覽器在發(fā)起真正的請求前會以options方式發(fā)起preflight請求. 而Laravel沒有正確處理好預檢請求, 所以就會返回404, 然后web服務器重定向404到錯誤頁面。

下面的解決方式不是非常優(yōu)雅:
就是添加處理preflight的中間件.

<?php

namespace App\Http\Middleware;

use Closure;

class PreflightResponse
{
    /**
    * Handle an incoming request.
    *
    * @param \Illuminate\Http\Request $request
    * @param \Closure $next
    * @return mixed
    */
    public function handle($request, Closure $next )
    {
        if ($request->getMethod() === "OPTIONS") {
            return response('');
        }

            return $next($request);
     }
 }

然后在App/Http/kernel.php中注冊該中間件.

protected $middleware = [
    \App\Http\Middleware\PreflightResponse::class,
    // ...
];

應該就能修復這個問題

2018年3月6日 06:24