我已经找到了许多教程这一整天。我的设置是完全相同的所有基本教程在那里。
目前,我能够访问http://localhost/oauth/token
,并成功将令牌返回给我。
之后,我使用ARC(高级Rest客户端)来做调用我自己的API的测试。
我传递了标题,例如
Authorization: Bearer the_token_here
accept: application/json
从这个头文件中,我只想访问laravel /user
提供的默认API。
但是,我总是得到{ "message": "Unauthenticated." }
的响应
请参阅本教程https://itsolutionstuff.com/post/laravel-5-how-to-create-api-authentication-using-passport-example.html
我可以按照教程进行登录,但无法通过端点details
获取数据。它返回{ "message": "Unauthenticated." }
响应
我的路线api.php
Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function(){
Route::get('/user', function( Request $request ){
return $request->user();
});
});
顺便说一句,在laravel.log中没有错误消息,我已经设置为调试模式
更新感谢Mayank提出的意见
League\\OAuth2\\Server\\Exception\\OAuthServerException: The resource owner or authorization server denied the request. in /.../vendor/league/oauth2-server/src/Exception/OAuthServerException.php:173
Stack trace:
#0 /.../vendor/league/oauth2-server/src/AuthorizationValidators/BearerTokenValidator.php(59): League\\OAuth2\\Server\\Exception\\OAuthServerException::accessDenied('Missing "Author...')
#1 /.../vendor/league/oauth2-server/src/ResourceServer.php(82): League\\OAuth2\\Server\\AuthorizationValidators\\BearerTokenValidator->validateAuthorization(Object(Zend\\Diactoros\\ServerRequest))
#2 /.../vendor/laravel/passport/src/Http/Middleware/CheckClientCredentials.php(46): League\\OAuth2\\Server\\ResourceServer->validateAuthenticatedRequest(Object(Zend\\Diactoros\\ServerRequest))
8条答案
按热度按时间11dmarpk1#
为了获得原因的详细错误消息,您需要转到
CheckClientCredentials
类详细信息,如下所示根据错误信息。在我的问题。
解决方案是将其添加到根文件夹的
.htaccess
(不仅在公共文件夹内)这里提到的官方文件中也有一条注解
如果没有上述配置,从任意位置调用应用程序时将忽略
Authorization
标头。一旦忽略,类内部将无法检索此标头数据yhuiod9q2#
如果你已经尝试了所有的方法,但似乎都不起作用,那么试着清除你的配置缓存。我花了两天时间重新安装passport,学习了数十亿个教程,创建了测试项目等等,最终意识到我需要清除缓存
php artisan config:cache
3htmauhk3#
在Ubuntu中,执行以下操作。
启用重写模式。
sudo a2enmod rewrite
转到
cd /etc/apache2
然后打开apache2.conf
nano apache2.conf
,找到下面的行,将AllowOverride None更改为AllowOverride All,如下所示。最后,重新启动apache2服务器
sudo service apache2 restart
vfhzx4xs4#
将以下代码粘贴到项目根文件夹的.htaccess文件中。
gopyfrb35#
我有同样的问题与Laravel 8 + Postman ,我是加密密码在数据库中的Bcypt(默认laravel加密密码的用户模型)。我是解决这个问题。
u3r8eeie6#
对于那些得到错误消息Unauthenticated即使令牌是正确的,只需替换laravel 8预建路由API:
变成
nhaq1z217#
如果任何人有相同的问题,并且所选的解决方案确实解决了它,请检查以下内容:**如果你去总是响应{“消息”:“Unauthenticated.”}**解决方案正在将此添加到根文件夹的.htaccess中(不仅在公用文件夹中)
选项-多视图-索引
k2arahey8#
如果任何人遇到相同的问题,而所选的解决方案无法解决它,请检查以下内容:
1)检查您是否在请求的头中发送了X-CSRF-TOKEN。在我的例子中,我使用了带有axios的vue:
如果您正在发送,请尝试更改 vendor/laravel/passport/src/Passport.php 第125行中的值(可能会更改)
从正确到错误
此问题可能与https://github.com/laravel/passport/issues/452中的问题类似
关于序列化的解释在期刊中
更新日期:2020年2月1日
正如 Zac Grierson 所评论的,供应商文件不应修改,因为它们将在以下内容中更改
composer 更新