HTTP状态码302解决方法

图

HTTP错误码302解决办法

问题描述

在制作网站的登录系统时,经测试发现,无法成功的从主页登录至个人页面,返回结果的HTTP状态码如下:

1
2
127.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#登录回调函数
@oid.after_login
def after_login(resp): #resp参数传递给after_login()函数,它包含了从OpenID提供商返回来的信息,上面设置需要返回的信息是:nickname, email
if resp.email is None or resp.email == "":
flash('Invalid login. Please try again.')
return redirect(url_for('login'))
user = User.query.filter_by(emile=resp.emil).first() #从数据库中搜索邮箱地址

if user is None: #如果用户不存在,说明是一个新用户,添加一个新用户到数据库
nickname = resp.nickname
if nickname is None or nickname == "":
nickname =resp.email.spilt('@')[0]
user = User(nickname = nickname, email = resp.email)
db.session.add(user)
db.session.commit()
remember_me = False

if 'remember_me' in session:
remember_me = session[ 'remember_me' ]
session.pop('remember_me', None)
login_user(user, remember = remember_me) #为了注册这个有效的登录,调用Flask-Login的login_user函数
return redirect(request.args.get('next') or url_for('index'))

测试始终不成功,无法成功登录:
输入OpenID进行登录
登录失败,利用flash给出反馈信息

从代码逻辑出发考虑:可能是从OpenID获取的数据有问题,也将无法再与数据库进行判断。尝试将判断邮箱改为判断用户名(emil改为nickname)

1
2
3
4
5
6
7
8
9
#登录回调函数
@oid.after_login
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呢? (还不清楚)

坚持原创分享,您的支持将鼓励我继续创作!