Php 反应+;拉威尔+;api令牌身份验证的圣地(非cookie)
我试图让React和Laravel使用中间件Sanctum一起工作 我可以看到很多人尝试使用基于cookie的设置来实现这一点的例子,但我尝试使用令牌设置来实现纯API方法。我这样做是因为我想准备在没有cookie的移动应用程序中使用后端 这是我设置的一部分: /backend/routes/api.php:Php 反应+;拉威尔+;api令牌身份验证的圣地(非cookie),php,reactjs,laravel-8,csrf-token,laravel-sanctum,Php,Reactjs,Laravel 8,Csrf Token,Laravel Sanctum,我试图让React和Laravel使用中间件Sanctum一起工作 我可以看到很多人尝试使用基于cookie的设置来实现这一点的例子,但我尝试使用令牌设置来实现纯API方法。我这样做是因为我想准备在没有cookie的移动应用程序中使用后端 这是我设置的一部分: /backend/routes/api.php: Route::post('/login', [ UserController::class, 'getAccessToken'] ); /frontend/store/api.js st
Route::post('/login', [ UserController::class, 'getAccessToken'] );
/frontend/store/api.js
static login( user ) {
var formData = new FormData();
formData.append('username', user.username);
formData.append('password', user.password )
formData.append('deviceName', 'browser');
return fetch(
'http://localhost:5001/api/login, {
method : 'post',
body : formData
}
);
}
我的问题是,当登录路由被访问时,它强制进行CSRF令牌检查。
即使登录路径不应该由Sanctum保护。
当我登录并且还没有令牌附加到请求时,这当然会失败。
据我所知,只有在登录后访问受保护的路由时才需要令牌。
我已经通过将其重命名为某个伪路径并获得错误,再次检查了它是否正在访问正确的路径
我是否在使用Sanctum方面做错了什么,或者Sanctum不是api令牌的首选用途?我是否应该转而调查JWT
提前感谢您的帮助 在:
我补充说:
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
当我拆下那条线时,它起作用了。我未能理解SPA等同于cookies的使用,因为我要说的是,我也在开发一个只使用API令牌的SPA
下一个问题是,我使用的是教义,而不是雄辩,我现在可以看到,当涉及到发行代币时,它远远不符合圣殿。但这将是另一个问题的主题。在:
/backend/app/Http/Kernel.php
我补充说:
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
当我拆下那条线时,它起作用了。我未能理解SPA等同于cookies的使用,因为我要说的是,我也在开发一个只使用API令牌的SPA
下一个问题是,我使用的是教义,而不是雄辩,我现在可以看到,当涉及到发行代币时,它远远不符合圣殿。但这将是另一个问题的主题。请检查此url,多亏了本教程,我才能够使其正常工作 这是我的LoginForm.jsx
从“React”导入React;
从“/services/apiClient”导入apiClient;
const LoginForm=(道具)=>{
const[email,setEmail]=React.useState(“”);
const[password,setPassword]=React.useState(“”);
常量handleSubmit=(e)=>{
e、 预防默认值();
apiClient.get(“/sanctum/csrf cookie”)。然后((响应)=>{
apiClient
.post(“/api/sanctum令牌”{
电邮:电邮,,
密码:密码,
设备名称:“反应v0.1”,
})
。然后((响应)=>{
控制台日志(响应);
});
});
};
返回(
登录
setEmail(e.target.value)}
必修的
/>
setPassword(e.target.value)}
必修的
/>
登录
);
};
导出默认登录信息代码>请检查此url,多亏了本教程,我才能够使其正常工作
这是我的LoginForm.jsx
从“React”导入React;
从“/services/apiClient”导入apiClient;
const LoginForm=(道具)=>{
const[email,setEmail]=React.useState(“”);
const[password,setPassword]=React.useState(“”);
常量handleSubmit=(e)=>{
e、 预防默认值();
apiClient.get(“/sanctum/csrf cookie”)。然后((响应)=>{
apiClient
.post(“/api/sanctum令牌”{
电邮:电邮,,
密码:密码,
设备名称:“反应v0.1”,
})
。然后((响应)=>{
控制台日志(响应);
});
});
};
返回(
登录
setEmail(e.target.value)}
必修的
/>
setPassword(e.target.value)}
必修的
/>
登录
);
};
导出默认登录信息代码>