iT邦幫忙

0

Laravel 7 訪問 api.php 無效

各位前輩好
小弟目前 Laravel 專案透過 php artisan ui 去生成登入驗證
且已在 web.php 的每個路由都加上 middleware('auth') 去做登入驗證

Route::get("/", function () {
    return view("Welcome", ["PageName" => "主控台"]);
})->middleware('auth')->name("index");

有登入才能訪問,無登入則導回 login
到這邊中介層正常執行中

最近打算把前後端分離,把資料處理部分放到 api.php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    echo "Hello";
});

但我在登入狀態下透過 chrome 去訪問 api/user 都會被導回根目錄
請問是不是我遺漏了什麼地方
有疏漏會再補上

-------2020/07/23更新------
目前把相關 token 都放在 Head 裡

<meta name="csrf-token" content="HHus72cP5RqmAkXlPBBBTGcGxszjtOgKOuaJ25uI">
<meta name="api_token" content="7HjBrVRy6c5UJHIa7BTTDzV9qFVw6yxr252Sw07mqwvyPayrJGEyyb5nXSif">

在 Body 透過 ajax 去 GET API 但仍然得到 「401 (Unauthorized)」

<script type="text/javascript">
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
            'Authorization': 'Bearer ' + $('meta[name="api_token"]').attr('content'),
        }
    });
    $.ajax({
        url: "http://localhost/api/user",
        type: 'GET',
        success: function (data) {
            alert("OK");
        },
        error: function (date) {
            alert("Fail");
        }
    });
</script>
淺水員 iT邦研究生 3 級 ‧ 2020-07-22 17:23:50 檢舉
圖好糊,貼程式碼參考: https://i.imgur.com/o15rs31.png
@淺水員 已調整,感謝提醒

2 個回答

0
浩瀚星空
iT邦超人 1 級 ‧ 2020-07-23 11:23:54
最佳解答

先教一下路由的寫法。用如下的寫法會比較單純點
將統一要跑的 middleware 宣告一個群組來跑路由。
如下範例

Route::middleware(['role:admin', 'auth'])->group(function () {
    Route::get('/getTime1', 'toolsCtrl@getServerTime');
    Route::post('/getTime2', 'toolsCtrl@getServerTime');
    Route::put('/getTime3', 'toolsCtrl@getServerTime');
});

再來說明你的問題。
如果都會跑401的話,其就是代表沒認証成功。
由於各自認証的方式不同。像我的就是改成標頭的 bearer token 的方式來傳送
你得先了解你的token的傳送方式。及認証上的設定。
現在這樣子只能告知你,你的認証沒成功。最多只能了解你的token可能是沒造規則傳送而已。

我自已是沒直使用原本的auth。我是改換jwt的方式處理。原本的auth很不好操作。

目前正在嘗試使用 Passport 感謝指導

0
travis0125
iT邦見習生 ‧ 2020-07-23 02:17:05

請參考這個
http://www.dahouduan.com/2017/09/18/laravel55-api-token/
請了解文章中所說的auth:api所代表意思

方便用git提供專案程式給我嗎?

已更新問題

我要發表回答

立即登入回答