Пример #1
0
    def post(self):
        #Handle POST request for this view. Url ---> /auth/logout
        """Endpoint to logout a user"""
        try:
            # get auth token
            auth_header = request.headers.get('Authorization')

            auth_token = None

            if auth_header and len(auth_header.split(" ")) > 1:
                auth_token = auth_header.split(" ")[1]

            if auth_token is None:
                return make_response(
                    jsonify({
                        "message": "Token required",
                        "status": "failure"
                    })), 403

            if auth_token is not None:
                #decode the token that was stored after login to extract the user id
                user_id = User.get_token_user_id(auth_token)

                if user_id == "Expired token. Please login to get a new token":

                    #First check if token exists in the Token table
                    token = Token.query.filter_by(token=auth_token).first()

                    # Delete token from the logged in user's table if it is in the logged in user table
                    if token is not None:
                        Token.delete_token(token)

                    return make_response(
                        jsonify({
                            "message":
                            " Token Expired. Please login to get a new one",
                            "status": "failure"
                        })), 403

                if user_id == "Invalid token. Please register or login":
                    return make_response(
                        jsonify({
                            "message":
                            " Invalid Token. Please login to get a new one",
                            "status": "failure"
                        })), 403

                #check if token exists in the Token table
                token = Token.query.filter_by(token=auth_token).first()

                #Use the user ID that was decoded from the token to extract
                # the user so u can change the logged in flag to 0
                user = User.query.filter_by(id=int(user_id)).first()

                #check if the token is stored in the table with tokens
                if token is not None:

                    #remove the token from the token table
                    Token.delete_token(token)

                    #set the user logged in flag to 0
                    user.logged_in = 0
                    user.save()

                    # create the response
                    response = {
                        "message": 'Logout Successful',
                        "status": "success"
                    }
                    # send the response
                    return make_response(jsonify(response)), 201
                else:
                    #log out user if not already logged out
                    response = {
                        "message": 'No need you are already logged out',
                        "status": "success"
                    }

                    #make and send the response
                    return make_response(jsonify(response)), 303

        except Exception as e:

            response = {
                "message": " Internal server error " + str(e),
                "status": "failure"
            }

            # Return a server error using the HTTP Error Code 500 (Internal Server Error)
            return make_response(jsonify(response)), 500