gpt4 book ai didi

Laravel Passport - 使用 javascript 401 Unauthenticated 使用你自己的 api

转载 作者:行者123 更新时间:2023-12-04 14:19:10 29 4
gpt4 key购买 nike

希望你一切顺利。几天以来,我一直在使用 Laravel Passport 苦苦挣扎,试图使用 javascript/vuejs 使用我自己的 api。最后几个晚上我几乎阅读了所有关于我的问题的现有帖子,但我找不到任何解决方案。我希望你能帮助我,在这一点上谢谢你。

我已经设置了一个新的 Laravel 应用程序并安装了 Laravel Passport,就像 Laravel 5.8 官方文档中描述的那样(https://laravel.com/docs/5.8/passport#introduction)。我已经在不同的应用程序中多次完成教程中的每一点,但没有成功。为了测试我的设置,我使用了这个小的 axios 请求。

axios.get('/oauth/clients')
.then(response => {
console.log(response);
}).catch(error => {
console.log(response);
})

当我登录时,它工作正常,当我使用不记名 token 并使用 postman 测试“/oauth/clients”时它也工作正常,但当我未登录时它总是返回 401 Unauthenticated。我的目标是创建一个 api,我可以作为未经身份验证的用户从我自己的应用程序中使用,而无需持有者 token ,但不能从外部使用。我认为 Laravel Passport 是执行此操作的正确方法。

我的请求 header :

:authority: laravel.dev
:method: GET
:path: /oauth/clients
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
cache-control: no-cache
cookie: XSRF-TOKEN=eyJpdiI6IkxTTGs2cEtvbXc5cmhIZDhEV1lBXC9nPT0iLCJ2YWx1ZSI6IlpPcjdCbmlDcURraG03MndjUTVYeTV1WXl1YWx3MVdNWjFrZ1QrRENJcnlhZVVCNWtZdzl5VDN6ZjdkclBGK0siLCJtYWMiOiI3ZmQ4YjlkZmU3OWMyNjNiYWVhNzJhMWVkOGRhOGJhMzJkNWQwZmZjMDhmZDM2Y2IxYWRkODJiNzFhNmQ5NDA1In0%3D; laravel_session=eyJpdiI6IlpKc3EyS2R4NjAyM0t5XC8xaTR6SjJBPT0iLCJ2YWx1ZSI6Im1JRlRReVFHQ01jTlNQT3BkYlI1V0dNeE1BMkVvODhnWXNjM1VPRUFBRWRBRnl1N1diUmpOSkVJUmc0NTdsVFgiLCJtYWMiOiI0ZTZkNzE2OGQ5MzJkY2FmYzEzOWZiYjA3YTRiM2MxOGQ3OGJmNWIzMTI4ODA5MDMxYWVlMjJmOTk1M2FjZDdlIn0%3D
pragma: no-cache
referer: https://laravel.dev/
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
x-csrf-token: 4Opsva9oDk6LkAapLGqqh9AuPzWKfVH4PYoxcMB1
x-requested-with: XMLHttpRequest
x-xsrf-token: eyJpdiI6IkxTTGs2cEtvbXc5cmhIZDhEV1lBXC9nPT0iLCJ2YWx1ZSI6IlpPcjdCbmlDcURraG03MndjUTVYeTV1WXl1YWx3MVdNWjFrZ1QrRENJcnlhZVVCNWtZdzl5VDN6ZjdkclBGK0siLCJtYWMiOiI3ZmQ4YjlkZmU3OWMyNjNiYWVhNzJhMWVkOGRhOGJhMzJkNWQwZmZjMDhmZDM2Y2IxYWRkODJiNzFhNmQ5NDA1In0=

响应头:

cache-control: no-cache, private
content-type: application/json
date: Sun, 07 Jul 2019 19:05:25 GMT
server: nginx/1.15.5
set-cookie: XSRF-TOKEN=eyJpdiI6IklTWEkrRTJxYXpiRFNQUm0zM3RLYWc9PSIsInZhbHVlIjoiMDEzSmVlMldQOXBrVUQxQjlCUGVVN2dpUk9VWmwrUlRjend3XC9CaUk1S2V6dUFlTDZtVWttREV5cVBPOFwveVQ0IiwibWFjIjoiZWZhMzA3OGVhYmY2NWNjNjgyMTg4NzAxZjQzNWYxZGQyMjVmMWY3MjAwNjllZTM5ODFiNjFiNWY1NGFjOGM0NiJ9; expires=Sun, 07-Jul-2019 21:05:25 GMT; Max-Age=7200; path=/
set-cookie: laravel_session=eyJpdiI6IlFLUDN0bGhBNW1UTytlbGgrcEZ0ekE9PSIsInZhbHVlIjoibHFvM09CSTFyZ05Kd0E0REVCekNOYmRocm01cnBVY3h1YjFOaXpyTXVcL05QSTNYdFFBdVpXZHd4NDVURGwralwvIiwibWFjIjoiYzM0ZWNhNzQ5MTJhY2VmNTZjZmM1YjFiNTgzYjU0NmZhZGIzZjVjYTFkOGNjYWEwNDEwODUyMzc5OWI2Njc3YiJ9; expires=Sun, 07-Jul-2019 21:05:25 GMT; Max-Age=7200; path=/; httponly
status: 401

重要说明:我已经与我的一个 friend 分享了这个项目,他在 MacOs 上使用 Laravel 在 docker 容器中工作,并且授权在他的设备上工作而无需任何更改。我在带有 Laravel Homestead 的 Windows 机器上运行。请问这个问题是 Laravel Homestead 还是 nginx 引起的?

最佳答案

路由“oauth/clients”使用“web”和“auth”中间件在“oauth”前缀下定义(例如,/oauth/any-route)。这解释了为什么您在未登录时收到 401 错误,因为“auth”中间件失败。

/vendor/laravel/passport/src/RouteRegistrar.php

 /**
* Register the routes needed for managing clients.
*
* @return void
*/
public function forClients()
{
$this->router->group(['middleware' => ['web', 'auth']], function ($router) {
$router->get('/clients', [
'uses' => 'ClientController@forUser',
'as' => 'passport.clients.index',
]);

...
});
}

此外,您不应为 API 路由使用“网络”中间件。 API 是无状态的,不应接收或响应任何 session 数据。这意味着不需要 CSRF/XSRF token ,我可以看到在您的示例中正在传输这些 token 。

您需要将 API 路由放在指定的 API 路由文件中。您会注意到授权中间件“auth:api”对于 API 路由也略有不同。

/routes/api.php

Route::middleware(['auth:api'])->group(function () {
Route::get('/your/path', 'Api\YourController@index');
});

然后在 Postman 中,只需传递您的不记名 token 和预期的响应类型。并且不要忘记将“api”前缀添加到您的路由,因为您将对 api.php 路由文件中的所有路由执行此操作。

/api/你的/路径

Authorization   Bearer {your_token}
Accept application/json

希望这对您有所帮助,祝您好运!

关于Laravel Passport - 使用 javascript 401 Unauthenticated 使用你自己的 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56925675/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com