Flutter POST调用LAMP登录API 错误凭证仍返回200状态码问题
问题根因
异常的核心原因是静态JSON文件不具备处理登录校验的能力。
你目前在LAMP服务器上仅存放了login.json静态文件,Apache收到指向该路径的POST请求时,只会直接返回文件的固定内容、默认返回200状态码,完全不会解析你提交的账号密码、不会和数据库里的用户凭证做比对,也不会根据校验结果返回不同响应。无论你输入正确还是错误的登录信息,拿到的永远是静态文件里写死的内容,自然会出现错误凭证也返回200的情况。你的怀疑是对的:必须搭建可运行的后端处理逻辑,才能完成JSON格式的登录请求处理。
修复步骤
- 移除静态
login.json文件,编写PHP动态处理脚本,配置Apache将/api/login路径指向该动态脚本 - 在PHP脚本中实现完整登录逻辑:
- 从POST请求体中解析出客户端提交的email、password参数
- 连接MySQL数据库,查询对应邮箱的用户记录,注意密码必须做加盐哈希校验,禁止明文存储、明文比对
- 凭证校验通过时,返回200状态码,响应体携带合法鉴权token;校验失败时返回401/400状态码,响应体携带明确的错误信息
- 修正Flutter端请求代码的问题:
你当前的POST请求没有指定JSON格式请求头,且没有对请求体做JSON编码,会导致后端无法正常解析参数,将api_service.dart中的请求部分修改为如下代码:
final response = await http.post( url, headers: {"Content-Type": "application/json"}, body: jsonEncode(requestModel.toJson()) );
- 调整状态码判断逻辑:不要将400状态码和200状态码归为同一处理分支,200仅代表登录成功,400/401代表请求参数错误或凭证无效,500代表服务端异常,避免错误场景被误判为请求成功。
注意事项
- 所有凭证校验逻辑必须放在服务端实现,禁止在前端代码、静态文件中写死正确的账号密码
- 生产环境登录接口必须启用HTTPS,防止账号密码、token在传输过程中被窃听
- 服务端生成的登录token要设置合理的过期时间,避免颁发永久有效的鉴权凭证
内容的提问来源于stack exchange,提问作者pasonmoasca
相关产品推荐
相关产品推荐

