这2个有什么区别?哪个更适合简单的 VueJS 应用程序?我已经阅读了他们的文档几次,但仍然很困惑。非常感谢。
我一直在尝试实现 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')
我正在将 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)
有人可以帮我吗?
我收到“419(未知状态)”错误,并显示消息“CSRF 令牌不匹配”。
POST http://127.0.0.1:8000/login 419(状态未知)
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 …
包裹:圣所
在请求获取数据时生成令牌后,它会像这样抛出我的错误
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) Laravel Fortify 可以在 API 的上下文中使用吗?据我了解,Fortify(虽然是无头的,即不包括 UI 层)允许我们自定义登录和注册页面,但在成功验证后它会自动重定向到主页页面。尽管 HOME 页面是可定制的,但这不是 API 登录的正常工作方式。它应该简单地以 JSON 格式返回一个成功令牌,而没有任何类型的重定向。
authenticateUsing
Fortify 中有一个函数,但即便如此,它也只是允许我们自定义身份验证逻辑而不是返回的数据。重定向仍然由 Fortify 执行。
如何在 REST API 的上下文中使用 Fortify?
注意:我将在我的 Vue 前端应用程序中使用它。我还将让Sanctum加入游戏,但在此之前,我只是想看看是否可以使用 Fortify 进行常规的基于令牌的身份验证,而无需编写自己的登录、注册和注销路由以及控制器功能。
我正在使用 laravel sainttum 为我的移动应用程序进行 API 身份验证。
我们如何限制每个用户的最大活跃代币数量?
目前,在personal_access_tokens
sainttum 生成的表中,没有 user_id 引用。对于当前的表,想象一下如果用户无限制地登录和注销。我们将在表中创建 N 个新令牌。
目前我正在使用 Laravel 构建 Rest API。对于身份验证,我使用 Sanctum 包。每次用户登录时,它都会生成一个如下所示的令牌:
"token": "98|b45h97e17VVpugjO71wwURoicIqDQP2ejTkCWwoD"
Run Code Online (Sandbox Code Playgroud)
但为什么 Sanctum 将数据库 ID 包含在令牌中呢?
如何从令牌中删除数据库 ID?
我在一个项目中使用 nuxt 3,但找不到使用 Laravel 和 Sanctum 进行身份验证的简单方法。
@nuxtjs/axios 模块仅兼容 nuxt 2,开发人员为 nuxt 3 提供的软件包(@nuxtjs-alt/auth)没有提供太多文档。我尝试实现它,但 nuxtApp().$auth 总是返回 undefined。
如何在登录屏幕中对我的用户进行身份验证,然后使用身份验证中间件来保护我的路由?我重申一下NUXT3的使用
我有 3 个 Laravel 应用程序,一个在 Laravel 6 上运行,2 个在 Laravel 8 上运行。
它们都使用来自 的 Vue 和 JWT auth tymondesigns
,我计划将它们全部升级到 Laravel 10。
但在我成功重建了我的一个应用程序以在其上安装 Laravel 10 和 Jetstream 后。我注意到与同一应用程序的旧版本相比,它使用了 x15 内存。
你可以在这里看到(我使用发条进行监控)。尽管 L10 与 Octane 一起运行,但它们都位于同一台服务器上,并且在具有 4GB 内存的 Ubuntu 中处于生产模式,
使用 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)