Laravel登录功能本地正常,线上部署后跳转本地IP问题排查
问题分析与修复方案
核心问题定位
- 环境配置错误:线上服务器的
.env文件中APP_URL仍保留本地IPhttp://192.168.7.101/school_portal,导致Laravel生成跳转链接时调用了本地地址。 - 表单硬编码隐患:登录表单直接写死绝对URL,不仅易出错,还可能因域名不一致引发session失效,触发“Please login first”的未登录校验提示。
- Session配置不匹配:线上HTTPS环境下未正确配置session相关参数,导致登录状态无法跨请求保留。
具体修复步骤
1. 更新线上环境配置
修改服务器根目录下的.env文件,替换为线上域名配置:
APP_URL=https://samplesite.edu.jp/school_portal SESSION_DOMAIN=samplesite.edu.jp SESSION_SECURE=true # 适配HTTPS环境,确保Cookie仅通过安全协议传输
执行缓存清除命令使配置生效:
php artisan config:clear php artisan cache:clear
2. 优化表单提交地址
放弃硬编码URL,改用Laravel路由名称生成地址,避免域名变更导致的错误:
<form class="form-horizontal mt-3 form-material" id="loginform" action="{{ route('login-user') }}" method='POST'> @if(Session::has('success')) <div class="alert alert-success">{{Session::get('success')}}</div> @endif @if(Session::has('fail')) <div class="alert alert-danger">{{Session::get('fail')}}</div> @endif @csrf <!-- The rest of the form (email and app code)--> </form>
3. 校验登录状态中间件逻辑
确保dashboard路由的登录校验中间件能正确识别session,比如自定义中间件代码:
public function handle(Request $request, Closure $next) { if(!session()->has('loginId')){ return redirect('/login')->with('fail', 'Please login first'); } return $next($request); }
同时确认登录后session('loginId')已被正确写入,无存储失败情况。
4. 修复目录权限
确保Laravel的storage和bootstrap/cache目录拥有正确读写权限,避免session无法存储:
chmod -R 755 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache # 根据服务器Web用户调整
内容的提问来源于stack exchange,提问作者CaptainCRAZY
相关产品推荐
相关产品推荐

