sat*_*pse 6 laravel vue.js nuxt.js laravel-sanctum
项目结构:
2个文件夹,即apiand client,其中 api 用于 laravel 安装,client 指的是 nuxt 项目。
Laravel (v-8.00) 设置:
这是我在.env文件中的会话变量
SESSION_DRIVER=cookie
SESSION_LIFETIME=120
SESSION_DOMAIN=127.0.0.1
SANCTUM_STATEFUL_DOMAINS=127.0.0.1:3000
Run Code Online (Sandbox Code Playgroud)
cors.php 包含以下内容
'paths' => [
'api/*',
'login',
'logout',
'sanctum/csrf-cookie'
],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => false,
'max_age' => true,
'supports_credentials' => true,
Run Code Online (Sandbox Code Playgroud)
没有sanctum.php对它进行任何更改,它包含
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,127.0.0.1:8000,::1')),
Run Code Online (Sandbox Code Playgroud)
Nuxt 设置
.env 文件包含:
PORT=3000
HOST=127.0.0.1
BASE_URL=http://127.0.0.1:3000
API_URL=http://127.0.0.1:8000
Run Code Online (Sandbox Code Playgroud)
nuxt.config.js 包含:
modules: [
'@nuxtjs/axios',
'@nuxtjs/auth-next',
'@nuxtjs/pwa',
'@nuxtjs/dotenv',
],
/*
** Axios module configuration
** See https://axios.nuxtjs.org/options
*/
axios: {
baseUrl: process.env.API_URL,
credentials: true,
},
auth: {
strategies: {
cookie: {
cookie: {
name: 'XSRF-TOKEN',
}
},
'laravelSanctum': {
provider: 'laravel/sanctum',
url: process.env.API_URL
},
},
redirect: {
login: '/login',
logout: '/login',
callback: '/login',
home: '/'
}
},
Run Code Online (Sandbox Code Playgroud)
Login.vue 已
data() {
return {
form: {
email: '',
password: ''
},
errors: {}
}
},
methods: {
async submit () {
this.$auth.loginWith('laravelSanctum', { data: this.form })
.then(response => {
this.$router.push(`/`)
})
.catch(({response}) => {
this.errors = response.data.errors
})
}
},
Run Code Online (Sandbox Code Playgroud)
回应
这是我在尝试登录用户时得到的回应:
我知道这是一个老问题。但我自己也遇到了这个问题,我想我应该分享对我有用的东西。
显然,设置SESSION_DOMAIN=127.0.0.1会引发419“CSRF 令牌不匹配”错误。
但是,如果将其设置为SESSION_DOMAIN=localhost,则效果很好。
| 归档时间: |
|
| 查看次数: |
1961 次 |
| 最近记录: |