views.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:lab5 作者: zlotus 项目源码 文件源码
def session_service():
    resp = jsonify(success=False)
    if request.method == 'DELETE':
        resp = jsonify(success=True)
        resp.set_cookie(key="token", expires=0)
        return set_debug_response_header(resp)
    if request.method == 'POST':
        username, password = request.json['username'], request.json['password']
        user = user_datastore.get_user(username)
        password_hash = user.password
        if verify_password(password, password_hash):
            print('user login: %s' % user.user_name + ' verified')
            resp = jsonify(success=True, userID=user.id)
            resp.set_cookie(key="token",
                            value=str({"id": user.id, "deadline": (time.time() + 86400) * 1000}),
                            max_age=7200,
                            httponly=True)
            return set_debug_response_header(resp)
        else:
            resp = jsonify(success=False, loginError='????????')
            return set_debug_response_header(resp)
    elif request.method == 'GET':
        token, deadline, user_id, user = None, None, None, None
        if not request.cookies:
            resp = jsonify(success=False, loginError='???')
            return set_debug_response_header(resp)
        else:
            cookies = request.cookies

        if not cookies.get('token'):
            resp = jsonify(success=False, loginError='???')
            return set_debug_response_header(resp)
        else:
            token = json.loads(cookies['token'].replace('\'', '"'))

        if not token.get('deadline') or not token.get('id'):
            resp = jsonify(success=False, loginError='???')
            return set_debug_response_header(resp)
        else:
            deadline = int(token['deadline'])
            user_id = int(token['id'])
            user = app_models.User.query.get(user_id)

        if time.time() > (deadline / 1000):
            resp = jsonify(success=False, loginError='????')
            return set_debug_response_header(resp)
        if user:
            result = {
                'success': True,
                'user': {
                    'userID': user.id,
                    'userName': user.user_name,
                    'permissions': [p.name for p in user.roles]
                }
            }
            resp = Response(json.dumps(result))
            return set_debug_response_header(resp)
    elif request.method == 'OPTIONS':
        pass

    return set_debug_response_header(resp)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号