部署Laravel/React至Scalingo后出现Unauthenticated错误求助
解决Laravel/React部署到Scalingo后刷新页面出现"unauthenticated"的问题
1. 检查Session驱动配置
Scalingo作为PaaS平台,若使用默认的file Session驱动,多实例部署时会出现Session不共享的问题,直接导致页面切换/刷新后身份验证失效。
- 修改
.env文件,将SESSION_DRIVER设置为redis或database - 若选择Redis驱动,确保已安装Scalingo的Redis附加组件,且
REDIS_URL配置正确 - 执行
php artisan config:cache使配置生效
2. 修正Cookie相关配置
Cookie的Domain、Secure及SameSite设置错误是常见的身份验证失效原因:
- 设置
SESSION_DOMAIN为你的Scalingo应用域名(例如yourapp.scalingo.io),不要包含http://或https://前缀 - 将
SESSION_SECURE_COOKIE设为true,Scalingo默认强制使用HTTPS SESSION_SAME_SITE配置为lax(同域部署场景下),避免Cookie被浏览器拦截
3. 确保React端请求正确携带凭证
React前端需正确传递Session和CSRF Token:
- 在Axios(或其他请求库)中开启凭证携带:
axios.defaults.withCredentials = true; - 每次请求前从Cookie中读取最新的XSRF Token并设置请求头:
const xsrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)?.[1]; if (xsrfToken) { axios.defaults.headers.common['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken); } - 避免缓存旧的Token,确保页面刷新后重新读取Cookie中的值
4. 配置Laravel的代理信任与CSRF中间件
Scalingo的反向代理会修改请求头,需确保Laravel正确识别:
- 在
app/Http/Middleware/TrustProxies.php中设置信任所有代理:protected $proxies = '*'; protected $headers = Request::HEADER_X_FORWARDED_ALL; - 检查
app/Http/Middleware/VerifyCsrfToken.php的except数组,不要误将需要身份验证的路由加入排除列表
5. 排查Scalingo实例与缓存问题
- 若部署了多个应用实例,必须使用共享型Session驱动(Redis/database),否则各实例的Session数据不互通
- 执行
scalingo restart -a yourapp重启应用,清除旧实例的缓存数据
6. 通过日志定位具体问题
利用Scalingo的日志工具查看详细错误信息:
- 执行
scalingo logs -a yourapp获取应用日志 - 查找"unauthenticated"相关的错误记录,区分是Session未找到(驱动配置问题)还是CSRF Token不匹配(前端传递问题)
内容的提问来源于stack exchange,提问作者Antony Bockstael
相关产品推荐
相关产品推荐

