Laravel项目部署至000webhost服务器后无法注册/登录问题排查
Laravel项目部署到000webhost后注册/登录失效排查方案
以下是几个最可能的原因及对应的排查、解决步骤:
会话(Session)配置异常
Laravel默认使用file会话驱动,依赖storage/framework/sessions目录的写入权限。000webhost服务器的目录权限可能默认不允许写入,导致会话无法存储,登录状态无法维持。
排查步骤:- 检查
storage及子目录的权限,确保设置为755或775(避免使用777); - 若权限调整后仍无效,可尝试将
.env中的SESSION_DRIVER改为database,并执行php artisan session:table和php artisan migrate生成会话表; - 确认
.env中的SESSION_DOMAIN设置为你的000webhost域名(比如your-site.000webhostapp.com),不要留空或填错。
- 检查
CSRF令牌验证失败
注册/登录表单如果缺少CSRF令牌,或者APP_URL配置错误,会触发419页面过期错误,导致请求被拦截。
排查步骤:- 检查登录、注册表单代码,确保顶部有
@csrf指令; - 打开浏览器控制台(F12),提交表单时查看是否有419状态码的请求,若有则说明CSRF验证失败;
- 确认
.env中的APP_URL与你的网站域名完全一致(包括http/https),执行php artisan config:clear清除配置缓存。
- 检查登录、注册表单代码,确保顶部有
数据库操作权限或字段缺失
即使数据库连接信息正确,也可能存在读写权限不足或表结构缺失的问题:- 检查数据库用户是否拥有
INSERT、UPDATE权限(部分免费主机默认只给读权限),可手动执行INSERT INTO users (name, email, password) VALUES ('test', 'test@example.com', bcrypt('123456'))测试能否写入数据; - 确认
users表存在remember_token字段(Laravel默认需要该字段处理"记住我"功能),若缺失,执行php artisan migrate:refresh(注意备份数据)或手动添加字段; - 查看
storage/logs/laravel.log文件,里面会记录具体的数据库错误信息(比如字段不存在、权限不足等)。
- 检查数据库用户是否拥有
缓存与配置未更新
本地开发时的缓存可能被带到生产环境,导致配置不生效:- 在000webhost的终端执行
php artisan config:clear、php artisan route:clear、php artisan view:clear清除各类缓存; - 若无法使用终端,可在项目根目录创建一个临时脚本文件(比如
clear-cache.php),内容为:
访问该脚本后删除,完成缓存清除。<?php require __DIR__.'/vendor/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); $kernel->handle( new Symfony\Component\Console\Input\ArrayInput(['command' => 'config:clear']), new Symfony\Component\Console\Output\NullOutput ); echo "缓存已清除";
- 在000webhost的终端执行
邮件验证配置问题(若注册需验证)
如果注册流程包含邮件验证,000webhost的免费邮件服务可能受限:- 检查
.env中的MAIL_MAILER、MAIL_HOST等配置是否正确,建议改用第三方邮件服务; - 查看
laravel.log是否有邮件发送失败的错误信息,若有则优先修复邮件配置。
- 检查
内容的提问来源于stack exchange,提问作者Khaled Mazen
相关产品推荐
相关产品推荐

