[英]Laravel Passport “auth:api” middleware acts as “web, auth” middleware
我已經為Laravel 5.3設置了Laravel Passport包,正如官方文檔( https://laravel.com/docs/5.3/passport#introduction )中所述。
我希望API由移動應用程序使用,因此我嘗試實現密碼授予令牌 。 我創建了一個密碼授予客戶端,以及令牌請求進程......
$response = $http->post('http://my-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'my@email.com',
'password' => 'my-password',
'scope' => '',
],
]);
...按預期工作,為我的一個用戶返回訪問令牌和刷新令牌 。
一方面,
php artisan route:list
列出api / user URI的正確中間件: api,auth:api
api guard的驅動程序在config / auth.php中正確設置為passport 。 總而言之,安裝過程的每一步都已完成( https://laravel.com/docs/5.3/passport#installation )。
默認api.php的內容:
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
當我訪問http://my-app.com/api/user時出現問題,因為它似乎是使用'web'中間件驗證請求,而不是'api'...當我訪問時,我是如果用戶未登錄,則重定向到/ login(登錄表單),如果是,則重定向到/ home(登錄表單)
任何幫助將非常感激。 提前致謝。
解決了! 僅供記錄,解決方案:
我發送請求到http://my-app.com/api/user,HTTP Header錯誤。 我發送:
Type: Authorization - Content: Bearer: $accessToken
......正確的方法是:
Type: Authorization - Content: Bearer $accessToken (without colon)
我從沒想過這可能是一個錯字......無論如何,錯誤並不容易被發現,因為重定向到登錄表單從一開始就誤導了我。 我相信這確實是一種奇怪的行為......
正確的解決方案是從此文件中刪除redirectTo()
在app/http/middleware/Authenticate.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.