我希望有人可以在已经执行成功unauthenticated
身份验证过程的情况下解释原因Oauth 2
。
我已经像Laravel的文档中那样设置了Passport
包,我成功通过了身份验证,获得了令牌值,等等。但是,当我尝试执行get
请求时,假设/api/user
,我收到Unauthenticated
错误作为回复。我使用标记值作为标题为Authorization
的标题,正如文档中所述。
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware("auth:api");
此功能假设将我自己作为经过身份验证的用户回馈,但我只获得Unauthenticated
。同样,如果我只是返回第一个用户,我又会再次获得Unauthenticated
。
Route::get('/test', function(Request $request) {
return App\User::whereId(1)->first();
})->middleware("auth:api");
在Laracast
的教程中,指导人员Passport
的设置,导师不在他的路线中有->middleware("auth:api")
。但如果不存在,那么就根本不需要身份验证!
请随时欢迎任何建议或答案!
答案 0 :(得分:5)
您必须为正在生成的令牌设置到期日期,
将AuthServiceProvider中的启动方法设置为类似下面的代码,并尝试生成新令牌。 Passports默认过期返回负数
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(15));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
答案 1 :(得分:2)
检查您的用户模型和数据库表,如果您修改了主要ID字段名称,请说出" id"甚至" user_id"你可能遇到问题。我调试了一个关于修改我的用户模型和数据库表中的主要id字段的问题,说" acct_id"而不是保持它只是" id"结果是" Unauthenticated"当我尝试通过auth:api中间件通过GET / user获取用户对象时。请记住,我在阳光下尝试了其他所有修复程序,直到我决定自己调试它。
还要务必更新护照。因为最近几周它已经做了一些改变。
我将在下面链接我的参考资料,它非常详细,定义明确我做了什么,以及我如何解决问题。
享受!
答案 2 :(得分:1)
我遇到此错误是因为我删除了护照mysql表(php artisan migrate:fresh
),php artisan passport:install
可以帮助我。请记住,删除桌子后,您需要重新安装护照!
答案 3 :(得分:0)
我有完全相同的错误,因为我忘了在项目名称之前放置http。
use Illuminate\Http\Request;
Route::get('/', function () {
$query = http_build_query([
'client_id' => 3,
'redirect_uri' => 'http://consumer.dev/callback',
'response_type' => 'code',
'scope' => '',
]);
// The redirect URL should start with http://
return redirect('passport.dev/oauth/authorize?'.$query);
});
Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://passport.dev/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 3,
'client_secret' => 'M8y4u77AFmHyYp4clJrYTWdkbua1ftPEUbciW8aq',
'redirect_uri' => 'http://consumer.dev/callback',
'code' => $request->code,
],
]);
return json_decode((string) $response->getBody(), true);
});