Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 反应+;拉威尔+;api令牌身份验证的圣地(非cookie)_Php_Reactjs_Laravel 8_Csrf Token_Laravel Sanctum - Fatal编程技术网

Php 反应+;拉威尔+;api令牌身份验证的圣地(非cookie)

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

我试图让React和Laravel使用中间件Sanctum一起工作

我可以看到很多人尝试使用基于cookie的设置来实现这一点的例子,但我尝试使用令牌设置来实现纯API方法。我这样做是因为我想准备在没有cookie的移动应用程序中使用后端

这是我设置的一部分:

/backend/routes/api.php:

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)}
必修的
/>
登录
);
};
导出默认登录信息