每天一點點之laravel框架開發 - API通過access_token獲取用戶id報 Unauthenticated. 錯誤(passport)


 

1.首先保證你的config/auth.php 中 guards 的 api 的 driver 選項改為 passport 

 

2.注冊中間件,在 app/Http/Kernel.php 文件中的 $routeMiddleware 數組中添加如下中間件

protected $routeMiddleware = [
        'client.credentials'=>\Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
    ]; 

然后在需要認證接口路由文件 routes/api.php 前面加上這個中間件。

Route::group([ 'middleware' => ['client.credentials']], function () {
  
});

如果中間件使用auth:api,會報 {"message":"Unauthenticated."} ,因為auth會先判斷是否登錄

 

3.此時訪問 /api/user 就會報 {"message":"Unauthenticated."} 

加上 accessToken 訪問就可以訪問到了

GET 方式
    /api/user
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],

我在使用postman請求接口的時候 選擇Authorization下的Bearer Token,請求還是報 Unauthenticated 

 

最后發現是Authorization類型選錯了,應該選擇Auth2.0,Add authorization data to  Request Headers,添加Access Token,然后訪問,就可以啦

 

 

 
如果還是 Unauthenticated,可以考慮一下配置文件了
可以查看日志,發現報一下錯誤:
 
Options FollowSymLinks and SymLinksIfOwnerMatch are both off, so the Rewrite
 
比如我們看看一個目錄的目錄配置:

 

<Directory "D:/www"> #Options Indexes FollowSymLinks #Options FollowSymLinks Options Indexes AllowOverride None Order allow,deny Allow from all </Directory>

 

根據以上的報錯可以看出是因為FollowSymLinks 禁用了,這就好說了,在配置中添加 Options FollowSymLinks 就可以啦
這里需要注意的是,出這個錯誤是因為  url中去除了 index.php 導致的
   之前:aaa.com/index.php/api/vi/list
   現在:aaa.com/api/vi/list
 
 
擴展:
線上項目為了完全着想,當根目錄下沒有 index.html 文件時,會顯示目錄結構,這樣顯然不可以,因此需要設置讓他不顯示,如果想實現以上效果,就可以將Options 中 Indexes去掉就好啦
Indexes 的作用就是當該目錄下沒有 index.html 文件時,就顯示目錄結構,去掉 Indexes,Apache 就不會顯示該目錄的列表了。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM