标签: laravel-sanctum

Laravel Sanctum 与 Passport

这2个有什么区别?哪个更适合简单的 VueJS 应用程序?我已经阅读了他们的文档几次,但仍然很困惑。非常感谢。

laravel laravel-passport laravel-7 laravel-sanctum

40
推荐指数
1
解决办法
2万
查看次数

CSRF 令牌与 Laravel sainttum 和 Angular http 不匹配

我一直在尝试实现 Laravel Sanctum,但即使我遵循了 Laravel Sanctum 文档中所述的所有内容,我也遇到了“CSRF 令牌不匹配”错误

cors.php配置文件

'paths' => [
    'api/*',
    'login',
    'logout',
    'sanctum/csrf-cookie'
],
'supports_credentials' => true,
Run Code Online (Sandbox Code Playgroud)

kernal 是根据文档添加的,因此在此处添加其代码不会浪费空间

.env文件

SESSION_DRIVER=cookie
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost
Run Code Online (Sandbox Code Playgroud)

我在这里使用 Angular 9 作为我的前端

这是我的拦截器

SESSION_DRIVER=cookie
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost
Run Code Online (Sandbox Code Playgroud)

这就是我向 Laravel 发送请求的方式

request = request.clone({
    withCredentials: true
})
Run Code Online (Sandbox Code Playgroud)

一旦命中第一条路线,我就可以确认 cookie 的创建,但问题出在第二条路线('/login')

http laravel angular laravel-sanctum

10
推荐指数
2
解决办法
2万
查看次数

为 Laravel sanctum 获取 401 未授权

我正在将 Laravel Sanctum 与 Vuejs SPA 一起使用。两者都驻留在同一个顶级域中

Laravel backend : app.demo.localhost
Vue SPA : app-spa.demo.localhost
Run Code Online (Sandbox Code Playgroud)

当使用 axios 从 VueJS SPA 调用时登录和注销(端点)工作正常,并且 XSRF-TOKEN 已成功设置,但是当我调用其他 api 端点时,它给了我 401 未经授权。

在 axios 中,这是设置

axios.defaults.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)

我有以下配置

在 Laravel .env 中

SESSION_DRIVER=cookie
SESSION_DOMAIN=.demo.localhost
SANCTUM_STATEFUL_DOMAINS=app-spa.demo.localhost
Run Code Online (Sandbox Code Playgroud)

在路由/Api.php

Route::middleware('auth:sanctum')->get('api/user', function (Request $request) {
   return $request->user();
});
Run Code Online (Sandbox Code Playgroud)

在 cors.php

'paths' => ['api/*', 'sanctum/csrf-cookie', 'login', 'logout'],

'allowed_methods' => ['*'],

'allowed_origins' => ['*'],

'allowed_origins_patterns' => [],

'allowed_headers' => ['*'],

'exposed_headers' => [],

'max_age' => 0,

'supports_credentials' => true,
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

vue.js axios laravel-7 laravel-sanctum

10
推荐指数
4
解决办法
1万
查看次数

Vue + Laravel 圣所 CSRF 令牌不匹配 419 错误

我收到“419(未知状态)”错误,并显示消息“CSRF 令牌不匹配”。

POST http://127.0.0.1:8000/login 419(状态未知)

CSRF 令牌不匹配。

Laravel 服务器:http://127.0.0.1:8000

Vue 服务器:http://localhost:8080

应用程序/Http/Kernel.php

'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/User.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    //...
}

Run Code Online (Sandbox Code Playgroud)

配置/cors.php

<?php

return [
    'paths' => [
        'api/*',
        'sanctum/csrf-cookie',
        'register',
        'login',
    ],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
];

Run Code Online (Sandbox Code Playgroud)

.env

SESSION_DRIVER=cookie
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:8080
Run Code Online (Sandbox Code Playgroud)

src/main.js …

php laravel vue.js laravel-sanctum laravel-8

10
推荐指数
2
解决办法
1万
查看次数

Laravel Sanctum:未找到列:“where 子句”中的 1054 列“api_token”未知

包裹:圣所

在请求获取数据时生成令牌后,它会像这样抛出我的错误

Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'api_token' in   
'where clause' (SQL: select * from `users` where `api_token` = XAzuNGUeOJ8CXbIoGEWhBTtWIFr0lFr8jjwScXQ4B0Qxfmu
2cHm9LaUwGX96zy0AnXhLLcCnBFCodQaOlimit 1) in file
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-sanctum

8
推荐指数
3
解决办法
2851
查看次数

Laravel 8:在 API 中使用 Fortify

Laravel Fortify 可以在 API 的上下文中使用吗?据我了解,Fortify(虽然是无头的,即不包括 UI 层)允许我们自定义登录和注册页面,但在成功验证后它会自动重定向到主页页面。尽管 HOME 页面是可定制的,但这不是 API 登录的正常工作方式。它应该简单地以 JSON 格式返回一个成功令牌,而没有任何类型的重定向。

authenticateUsingFortify 中有一个函数,但即便如此,它也只是允许我们自定义身份验证逻辑而不是返回的数据。重定向仍然由 Fortify 执行。

如何在 REST API 的上下文中使用 Fortify?

注意:我将在我的 Vue 前端应用程序中使用它。我还将让Sanctum加入游戏,但在此之前,我只是想看看是否可以使用 Fortify 进行常规的基于令牌的身份验证,而无需编写自己的登录、注册和注销路由以及控制器功能。

laravel laravel-authentication laravel-sanctum

8
推荐指数
2
解决办法
6499
查看次数

Laravel sainttum 限制每个用户的代币数量?

我正在使用 laravel sainttum 为我的移动应用程序进行 API 身份验证。

我们如何限制每个用户的最大活跃代币数量?

目前,在personal_access_tokenssainttum 生成的表中,没有 user_id 引用。对于当前的表,想象一下如果用户无限制地登录和注销。我们将在表中创建 N 个新令牌。

在此输入图像描述

  1. 是否有默认的方法来限制每个用户开箱即用的令牌总数,或者这需要我自己完成?
  2. 在每次新登录时将新的令牌行添加到数据库表中是一个好习惯吗?

laravel laravel-sanctum

8
推荐指数
1
解决办法
5619
查看次数

Laravel - Sanctum 从生成的令牌中删除数据库 ID

目前我正在使用 Laravel 构建 Rest API。对于身份验证,我使用 Sanctum 包。每次用户登录时,它都会生成一个如下所示的令牌:

"token": "98|b45h97e17VVpugjO71wwURoicIqDQP2ejTkCWwoD" 
Run Code Online (Sandbox Code Playgroud)

但为什么 Sanctum 将数据库 ID 包含在令牌中呢?

在此输入图像描述

如何从令牌中删除数据库 ID?

php security laravel laravel-sanctum

8
推荐指数
1
解决办法
1492
查看次数

使用 Laravel 9 和 Sanctum 进行 Nuxt 3 身份验证

我在一个项目中使用 nuxt 3,但找不到使用 Laravel 和 Sanctum 进行身份验证的简单方法。

@nuxtjs/axios 模块仅兼容 nuxt 2,开发人员为 nuxt 3 提供的软件包(@nuxtjs-alt/auth)没有提供太多文档。我尝试实现它,但 nuxtApp().$auth 总是返回 undefined。

如何在登录屏幕中对我的用户进行身份验证,然后使用身份验证中间件来保护我的路由?我重申一下NUXT3的使用

authentication oauth nuxt.js laravel-sanctum nuxtjs3

8
推荐指数
1
解决办法
4735
查看次数

Laravel 9 和 10 使用比以前版本 x15 的内存(可能是由于 SANCTUM),如何优化?

我有 3 个 Laravel 应用程序,一个在 Laravel 6 上运行,2 个在 Laravel 8 上运行。

它们都使用来自 的 Vue 和 JWT auth tymondesigns,我计划将它们全部升级到 Laravel 10。

但在我成功重建了我的一个应用程序以在其上安装 Laravel 10 和 Jetstream 后。我注意到与同一应用程序的旧版本相比,它使用了 x15 内存。

你可以在这里看到(我使用发条进行监控)。尽管 L10 与 Octane 一起运行,但它们都位于同一台服务器上,并且在具有 4GB 内存的 Ubuntu 中处于生产模式,

运行 Laravel 8 的旧版本- 仅使用 2MB 内存 在此输入图像描述

使用 Jetstream 运行 Laravel 10 的新版本- 使用 30MB 内存(即使使用 404) 在此输入图像描述

我认为这是由于我自己的代码结构和应用程序设计造成的,所以我在 Laravel 8 和 Laravel 9 的裸安装之间进行了测试

composer create-project laravel/laravel:^8.0 l8
Run Code Online (Sandbox Code Playgroud)

composer create-project laravel/laravel:^9.0 l9
Run Code Online (Sandbox Code Playgroud)

然后将其添加到两个 api 路由上。

Route::get('/test', …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-sanctum laravel-9 laravel-10

8
推荐指数
0
解决办法
674
查看次数