每天一点点之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 就不会显示该目录的列表了。
 

 

posted @ 2018-12-20 10:25  我若亦如风  阅读(6298)  评论(0编辑  收藏  举报