我也面临这个问题,直到我意识到我对护照工作原理的理解是错误的。
Passport 是关于在用户同意的情况下授予客户端应用程序用户的数据(这就是 OAuth2 的工作方式)。因此,当客户端应用程序尝试获取最终将授予对该用户数据的访问权限的访问令牌时,必须征得该用户的同意。Web 中间件作为一个层来获取该用户的同意。要签署同意书,用户必须先登录,否则将无法证明它是实际用户。
为了更好地理解,请考虑您的应用尝试实现“使用 Google 登录”功能的场景。您在登录页面中放置了一个重定向到 Google 的按钮,重定向后,用户登录到他们的 Google 帐户,签署同意书并使用授权码重定向回您的应用程序。就是这样,这里 Google 是您正在构建的应用程序,而另一个应用程序是客户端应用程序。
如果进行实际实施,仍然是理解这一点的最佳方法。只需在 laravel 中创建一个新应用程序并将此代码放入 routes/web.php 文件中。
Route::get('/redirect', function () {
$query = http_build_query([
'client_id' => 'YOUR APP'S CLIENT ID',
'redirect_uri' => 'THE CALLBACK YOU GAVE DURING CREATING THE CLIENT',
'response_type' => 'code',
'scope' => '',
]);
return redirect('http://your-app.com/oauth/authorize?'.$query);
});
然后访问带有/redirect
路线的新应用程序。确保您的主应用程序也在运行。