1.首先保证你的config/auth.php
中 guards
的 api
的 driver
选项改为 passport
2.注册中间件,在 app/Http/Kernel.php
文件中的 $routeMiddleware
数组中添加如下中间件
protected $routeMiddleware = [ 'client.credentials'=>LaravelPassportHttpMiddlewareCheckClientCredentials::class, ];
然后在需要认证接口路由文件 routes/api.php
前面加上这个中间件。
Route::group([ 'middleware' => ['client.credentials']], function () { });
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 就不会显示该目录的列表了。