HTTP错误码302解决办法
问题描述
在制作网站的登录系统时,经测试发现,无法成功的从主页登录至个人页面,返回结果的HTTP状态码如下:1
2127.0.0.1 - - [09/Jan/2019 09:08:31] "GET /index HTTP/1.1" 302 -
127.0.0.1 - - [09/Jan/2019 09:08:31] "GET /login?next=%2Findex HTTP/1.1" 200 -
注:/login为登录页面, /index为成功登录后的个人页面
第一个返回结果表示跳转/index个人页面时,发生了302 Found-临时性重定向。
第二个返回结果表示跳转/login登录页面时,发生200 OK, 表示从客户端发来的请求在服务器端被正常处理了。所以又回到了登录页面。
302定义
302 : 302 代表暂时性转移(Temporarily Moved )。
该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
意思就是你访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。
解决方法
我这里出现302错误的原因是由于我的后端代码写了从OpenID获取用户名和邮箱后,==对邮箱email进行验证==,若数据库中不存在该用户,则当作新用户处理,分别将从OpenID中获取的用户名nickname和邮箱email存入数据库。
1 | #登录回调函数 |
测试始终不成功,无法成功登录:
从代码逻辑出发考虑:可能是从OpenID获取的数据有问题,也将无法再与数据库进行判断。尝试将判断邮箱改为判断用户名(emil改为nickname)1
2
3
4
5
6
7
8
9#登录回调函数
def after_login(resp):
if resp.nickname is None or resp.nickname == "":
flash('Invalid login. Please try again.')
return redirect(url_for('login'))
user = User.query.filter_by(nickname=resp.nickname).first() #从数据库中搜索用户名信息
……
……
测试后成功登录:
说明从OpenID请求发回的数据是没有email信息的,程序逻辑进入了回到登录页/login
为什么从OpenID返回的信息没有email呢? (还不清楚)