账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    laravel 在关闭csrf情况下跨域POST请求无法取到session值
    28
    0

    前端:VUE 后端:Laravel

    1. 我的需求是后端生成验证码存在session里,然后前端post请求时取出session里的验证码与前端传来的验证码进行比较,但是这时取不到session值了

    2.搜索了一下,发现是由于关闭了csrf的原因,可是我的项目是前后端分离的,本来就是跨站请求。。如果不关csrf,就不报mismatchToken的错误
    求大神看看

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在 Laravel 中,当尝试发送跨域 POST 请求并使用 CSRF token 时,可能会遇到无法取到 session 值的问题。以下是一些可能的原因和解决方案:

      1. CSRF token 在 Laravel 中默认保存在 session 中。如果你没有将 CSRF token 添加到 session,那么在发送跨域 POST 请求时,它将不会被服务器识别。你可以通过设置 CSRF 小锁(csrfLock)来解决这个问题。

      php // config/filesystem.php session_name('csrf_lock');

      1. 如果你的 CSRF token 是硬编码在代码中的,那么当请求头中没有硬编码的 CSRF token 时,服务器将不会识别这个 token。

      2. 你可能没有正确设置 CSRF 验证规则。你可以通过在 config/contracts 中配置 CSRF 验证规则来解决这个问题。

      3. 你可能在发送 POST 请求时,没有正确设置 Content-Type 的值。正确的值应该是 application/json,而不是 application/x-www-form-urlencoded

      php // config/web.php header('Content-Type: application/json');

      1. 你可能在 POST 请求的 body 中,没有正确将 CSRF token 添加到请求体中。

      php // config/web.php curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['csrf_token' => csrf_token]));

      解决这个问题的方法通常是确保 CSRF token 在请求头中被正确地设置,同时正确地在 POST 请求的 body 中添加 CSRF token。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部