我正在使用 Vuejs 和 Laravel 构建 SPA,我安装了 Laravel sanctum 以通过其令牌对用户进行身份验证。
api.php
Route::post('/teacher/login', 'Teacher\RegisterController@login')->middleware('auth:sanctum');
登录.Vue
login(){
axios.get('/sanctum/csrf-cookie').then(response => {
this.form.post('api/teacher/login')
.then( response => {
console.log( response );
})
.catch( error => {
console.log( error );
})
});
}
自定义控制器
public function login(Request $request){
$credentials = $request->only('email', 'password');
if(Auth::attempt($credentials)){
return response()->json(Auth::user(), 200);
}
}
我在没有 sanctum 中间件的情况下检查了它,它成功地记录了用户,但是我在路由中添加了中间件,它说您的请求未经身份验证。 我按照官方的 Laravel-7 文档实现了所有内容,我不明白为什么它说未经身份验证,附上 IMG 以了解更多细节。
答案 0 :(得分:0)
确保您从 csrf-cookie
获得的 X-CSRF-TOKEN 或 X-XSRF-TOKEN 附加到 api/teacher/login
的 HTTP 请求标头。对于 Axios,你可以用
axios.defaults.headers.common['X-XSRF-TOKEN'] = <the x-xsrf-token from csrf-cookie request>
确保使用端口号在 SANCTUM_STATEFUL_DOMAINS
中声明 .env
。
您也可以包含多个域。
SANCTUM_STATEFUL_DOMAINS='your-domain.test:8080,localhost:8000'
如果没有这个,您将遇到 Session store not set
问题,因为中间件 EnsureFrontendRequestsAreStateful
正在检查请求是否来自前端。如果是来自fronetned,那么它会附加以下中间件