php Laravel Sanctum -登录后无法验证

pcww981p  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(237)

我用laravel 8 sancutum和vue在本地开发了一个小型网络应用程序。
在本地和prod服务器上,我都使用docker,所以一切都是一样的。sub.my-domain.com

所有局部工作正常。

我遇到的问题是在实时服务器上运行代码时。
我首先向/sanctum/csrf-cookie发送一个请求,它返回一个204响应代码,但没有设置cookie-这就是问题所在,我认为当在本地运行这个请求时,设置了XSRF-TOKEN
VueX中的登录方法:

login: function ({ commit }, data) {
      axios.get('/sanctum/csrf-cookie', { withCredentials: true })
        .then(response => {
          axios.post('api/login', {
            email: data.email,
            password: data.password
          })
            .then(response => {
              if (response.data.success) {
                commit('setUser', response.data);
                // router.go('/sales-dashboard')

              } else {
                console.log(response.data.message)
              }
            })
            .catch(function (error) {
              console.error(error);
            });
        })
    },

.环境

SESSION_DRIVER=cookie
SANCTUM_STATEFUL_DOMAINS=my-domain.com
SESSION_DOMAIN=.my-domain.com
SESSION_LIFETIME=120
SESSION_SECURE_COOKIE=false;

config/sanctum.php

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1,.my-domain.com, sub.my-domain.com',
        env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
    ))),

我不知道我哪里出错了,因为它在本地运行良好,所以一定是与配置有关。
澄清一下,实际的登录端点工作正常,但是当转到sancutum中间件后面的路由时,我得到了一条未经身份验证的消息。
请让我知道我哪里做错了
谢谢

h43kikqp

h43kikqp1#

问题在于CORS和密室的建立。
如果你遇到了类似的问题,要检查两件事。
1 - CORS -检查您的session.php文件,如果您没有使用SSL,请将secure设置为false,并确保same_sitelax
2 - Sanctum config -检查sanctum.php并确保您的域是stateful密钥的一部分(我使用子域,所以我使用sub.domain.com(没有端口或协议))。

SESSION_DRIVER=cookie
SANCTUM_STATEFUL_DOMAINS=sub.domain.com
SESSION_DOMAIN=.domain.com

我认为SESSION_DOMAIN上的前导.是通配符。
一旦这一切都完成了,一切都在工作。

相关问题