簡體   English   中英

Laravel Passport“auth:api”中間件充當“web,auth”中間件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM