
@app.before_request
def before_request():
ignore_urls = app.config['IGNORE_URLS']
ignore_check_login_urls = app.config['IGNORE_CHECK_LOGIN_URLS']
path = request.path
# 如果本身是静态页面则不需要判断
pattern = re.compile("%s" % "|" .join(ignore_check_login_urls))
if pattern.match(path):
return
# 如果本身是登录页面则不需要判断
pattern = re.compile("%s" % "|".join(ignore_urls))
if pattern.match(path):
return
user_info = check_login()
app.logger.info(user_info)
'''
登录页面和static静态页面不需要登录
'''
if not user_info:
return redirect(UrlManager.buildUrl("/user/login"))
return
'''
判断用户是否已经登录
'''
def check_login():
cookies = request.cookies
auth_cookie = cookies[app.config['AUTH_COOKIE_NAME']] if app.config['AUTH_COOKIE_NAME'] in cookies else ""
'''
打印auth_cookie,结果显示为:INFO in AuthInterceptors: ????#1
'''
app.logger.info(auth_cookie)
if auth_cookie is None:
return False
auth_info = auth_cookie.split("#")#第一位为随机校验码,第二位为用户uid
if len(auth_info) != 2:
return False
'''
从User表中查找对应uid下的记录
'''
app.logger.info(auth_info[1])
try:
user_info = User.query.filter_by(uid = auth_info[1]).first();
except Exception:
return False
if user_info == None:
return False
if auth_cookie[0] != UserService.geneAuthCode(user_info):
return False
return user_info
登录用户名是xuzhihong
密码是123
以下的输出结果是本来Cookie就存在。
127.0.0.1 - - [14/Oct/2019 10:06:32] "GET /user/login HTTP/1.1" 200 -
[2019-10-14 10:06:32,253] INFO in AuthInterceptors: 228323ecf3fa793475c78aa1d0e7fec2#1
[2019-10-14 10:06:32,253] INFO in AuthInterceptors: 1
2019-10-14 10:06:32,465 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2019-10-14 10:06:32,466 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,470 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2019-10-14 10:06:32,470 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,475 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2019-10-14 10:06:32,479 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,484 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
2019-10-14 10:06:32,489 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,492 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2019-10-14 10:06:32,498 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,499 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2019-10-14 10:06:32,499 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,501 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb
4_bin AS anon_1
2019-10-14 10:06:32,501 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:06:32,503 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-10-14 10:06:32,504 INFO sqlalchemy.engine.base.Engine SELECT user.uid AS user_uid, user.nickname AS user_nickname, user.mobile AS user_
mobile, user.email AS user_email, user.sex AS user_sex, user.avatar AS user_avatar, user.login_name AS user_login_name, user.login_pwd AS us
er_login_pwd, user.login_salt AS user_login_salt, user.status AS user_status, user.updated_time AS user_updated_time, user.created_time AS u
ser_created_time
FROM user
WHERE user.uid = %s
LIMIT %s
2019-10-14 10:06:32,504 INFO sqlalchemy.engine.base.Engine ('1', 1)
[2019-10-14 10:06:32,506] INFO in AuthInterceptors: False
2019-10-14 10:06:32,507 INFO sqlalchemy.engine.base.Engine ROLLBACK
127.0.0.1 - - [14/Oct/2019 10:06:32] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [14/Oct/2019 10:06:32] "GET /static/bootstrap/bootstrap.min.css.map HTTP/1.1" 404 -
2019-10-14 10:06:33,943 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-10-14 10:06:33,945 INFO sqlalchemy.engine.base.Engine SELECT user.uid AS user_uid, user.nickname AS user_nickname, user.mobile AS user_
mobile, user.email AS user_email, user.sex AS user_sex, user.avatar AS user_avatar, user.login_name AS user_login_name, user.login_pwd AS us
er_login_pwd, user.login_salt AS user_login_salt, user.status AS user_status, user.updated_time AS user_updated_time, user.created_time AS u
ser_created_time
FROM user
WHERE user.login_name = %s
LIMIT %s
2019-10-14 10:06:33,945 INFO sqlalchemy.engine.base.Engine ('xuzhihong', 1)
2019-10-14 10:06:33,947 INFO sqlalchemy.engine.base.Engine ROLLBACK
127.0.0.1 - - [14/Oct/2019 10:06:33] "POST /user/login HTTP/1.1" 200 -
如果Cookie不存在的话,也就是我在浏览器端清除一次之后,下一次登录时候的输出结果和上文还不一样,是这样的,也就是不包含INFO in AuthInterceptors的那一部分
2019-10-14 10:26:15,418 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2019-10-14 10:26:15,419 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,421 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2019-10-14 10:26:15,422 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,425 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2019-10-14 10:26:15,426 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,427 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
2019-10-14 10:26:15,427 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,429 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2019-10-14 10:26:15,429 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,430 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2019-10-14 10:26:15,430 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,431 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb
4_bin AS anon_1
2019-10-14 10:26:15,432 INFO sqlalchemy.engine.base.Engine ()
2019-10-14 10:26:15,433 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2019-10-14 10:26:15,435 INFO sqlalchemy.engine.base.Engine SELECT user.uid AS user_uid, user.nickname AS user_nickname, user.mobile AS user_
mobile, user.email AS user_email, user.sex AS user_sex, user.avatar AS user_avatar, user.login_name AS user_login_name, user.login_pwd AS us
er_login_pwd, user.login_salt AS user_login_salt, user.status AS user_status, user.updated_time AS user_updated_time, user.created_time AS u
ser_created_time
FROM user
WHERE user.login_name = %s
LIMIT %s
2019-10-14 10:26:15,436 INFO sqlalchemy.engine.base.Engine ('xuzhihong', 1)
2019-10-14 10:26:15,437 INFO sqlalchemy.engine.base.Engine ROLLBACK
127.0.0.1 - - [14/Oct/2019 10:26:15] "POST /user/login HTTP/1.1" 200 -