day8_接口开发_login
@server.route('/login',methods = ['get','post'])
def login():
username = request.values.get('username','') # 获取参数用户名,如果没有获取到,默认是空字符串
password = request.values.get('password','') # 获取参数密码,如果没有获取到,默认是空字符串
if username.strip() and password.strip():
password = md5_passwd(password) # 加密后的密码
sql = 'select id,username from user where username="%s" and password="%s";' % (username,password)
sql_res = conn_mysql(sql) # 获取数据库结果
print('sql_res...',sql_res) # 这行有没有无所谓
if sql_res: # 如果获取到,证明数据库里有该用户
sign_str = username + str(int(time.time())) # 拼接签名,time.time()返回的是浮点型数据
sign = md5_passwd(sign_str) # 加密后的签名
op_redis(username, sign) # 把用户名和签名写到redis里
return '{"msg":"登录成功","sign":"%s","userName":"%s"}' % (sign, username)
# user_id = sql_res['id'] # 获取用user表里的的id,即第一个字段,一共四个字段
# return '{"msg":"登录成功","sign":"%s","userId":"%s"}' % (sign,user_id)
# 如果返回userId,还得通过userId去mysql数据库里取username,然后通过username去redis数据库里取签名,影响性能
# 所以上面直接返回username,然后去redis数据库里拿到签名这样省了一步
# response = make_response('{"msg":"登录成功","sign":"%s","userName":"%s"}' % (sign, username))
# response.set_cookie(username,sign) # 设置cookies
# return response
else:
return my_json(LOGIN_FAIL)
else:
return my_json(NOT_NULL)
在登录接口里导入make_response就可以往浏览器里set cookies,这种方式不安全,会导致cookie盗用,如下图可以在浏览器里看到set到浏览器里的用户名和sign
client发起请求,把username和password传到服务端,服务端进行校验,验证通过后,服务端返回请求,并把cookie set到客户端,下次客户端进行添加用户信息时把信息传到服务端,同时浏览器把cookie也发到服务端,服务端进行校验,通过request.values.get方法把客户端发过来的cookie get到,然后去和redis里面的进行对比,对比通过就可以进行后续的操作
就是在day8_api->api->api.py的add_stu2接口里,脚本改成这样
就实现了把sign写到cookies里,如下面三个图的设置以及打印出cookies里的sign
登录接口开发完成后,会在redis数据库里生成登录的用户名和签名,如下图:
同时也可以在mysql数据库里看到登录成功的用户名、密码和userId,如下图: