问题描述
最近在使用symfony 2开发,处于刚入门阶段。昨天完成了注册登录模块,开发阶段一直没有问题,快完成时诡异的错误出现了:注册成功后,查询数据表,记录存在,但登录始终报错。由于登录是使用symfony2自带的安全框架,又不知道 symfony2有什么debug的好方法,所以只能检查代码,继续读symfony2文档,因为之前做过登录注册模块,所以对配置什么的还是蛮有信心,确信不会错,搞了半天不知道问题在哪。注册成功,登录始终不成功。
衣带渐宽终不悔,为 bug 消的人憔悴
最后还是同事过来,问我用什么加密,然后试图寻找登录加密与注册加密的结果是否一致。不成功,因为login的过程完全由symfony来完成的,查文档一时又找不到login具体的代码,最后,我们找了一个在线加密网站,比对加密结果和注册加密结果是否一致,最后结果是一致。。。蛋疼!尼妈这错太诡异了!难道真要我这个刚入门的去看框架源码???
众里寻bug千百度,蓦然回首,bug 却在灯火阑珊处
正当我垂头丧气心如死灰批头散发郁闷的要死的时候,突然!眼前一亮!为什么网站上加密结果的最后是两个等号而数据库里面的没有等号???!!!我擦,终于找到了!经过测试,发现快完成的时候改用了架构师设计的数据库,password字段长度只有50,而我之前设计的是255,且密码在采用sha512算法加密后长度大于50,导致写入数据库的只有前面的50个字符,所以我开始比对的时候竟然没有发现这个问题。。。(我看开头几位都一样就没有关注后面的。。。)!!!而我的印象里,如果字符串大于数据库设计的长度应该是要报错的,所以要么是mysql截取了,要么是symfony截取了,具体原因等下次再研究吧。。。