每天一点点之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