php - laravel 為什麼會重定向兩次?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-20 10:07:24
0
1
1179

目前在做微信登入的網頁,使用的是微信提供的介面,使用者造訪的index/index的時候,跳到微信指定的url上:

function index(){
    $wxService = \App::make('App\Http\Service\WXActivityService');
    $target_url = route('Index/Activity');
    $redirect_url = $wxService->getWxRedirectUrl($target_url);
    return redirect()->intended($redirect_url);
}

這段程式碼很簡單,就是根據微信指定的url格式來拼接url,然後重定向到這個url($target_url)上.微信會根據其中的redirect_uri來重定向回我設定的$target_url 頁面.
但是現在的問題是,微信那邊帶著code重定向回我的頁面以後,我這邊伺服器會收到兩次同樣的請求,這就很奇怪,請問大神這是什麼情況?是不是laravel的跨站重定向有問題?header函數來重定向也不能實現,實在是非常鬱悶...
我記錄了日誌,發現index方法是只執行了一次的,但是$target_url 卻被訪問了兩次...

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回覆(1)
滿天的星座

檢查一下,兩次請求分別的 Request Method:
因為是跨域請求,客戶端發先發送一個OPTIONS 請求
Preflighted Requests是CORS中一種透明伺服器驗證機制。預檢請求首先需要向另外一個網域的資源發送一個 HTTP OPTIONS 請求頭,其目的就是為了判斷實際發送的請求是否是安全的。

很有可能是這個問題,
我現在用axios 作為我的網路請求庫,也遇到了這個問題,跨域訪問的時候,都會先發送一個OPTIONS請求,用來判斷接下來的請求是否安全和被允許

我現在的做法是,在index.php 入口文件中,檢測,是否為OPTIONS 請求,如果是就返回一個狀態
具體代碼

if ($_SERVER['REQUEST_METHOD']=='OPTIONS') {
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
    header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS,PATCH');
    return;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板