各位前輩好
小弟目前 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>
先教一下路由的寫法。用如下的寫法會比較單純點
將統一要跑的 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很不好操作。
請參考這個
http://www.dahouduan.com/2017/09/18/laravel55-api-token/
請了解文章中所說的auth:api所代表意思
方便用git提供專案程式給我嗎?