首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用注销?

如何使用注销?
EN

Stack Overflow用户
提问于 2022-02-22 18:47:53
回答 1查看 741关注 0票数 0

我在Flask上得到了一个二手API项目,这是我以前从未使用过的,而且我很快就提交了它。

在代码中,我遇到了一个正在注销的问题。我不知道如何在登录后注销。我认为唯一的解决方案是删除在登录时提供的JWT,但不知道如何做到这一点。

知道如何解决这个问题吗?即使是新的想法也是受欢迎的。

代码语言:javascript
复制
app = Flask(__name__)
CORS(app)
# cors = CORS(app, resource={r'*': {'origins': 'http://localhost:4200'}})
bcrypt = Bcrypt(app)
app.config["JWT_SECRET_KEY"] = "super-secret"  # Change this!
jwt = JWTManager(app)

Base.metadata.create_all(engine)
session = Session()


@app.route('/')
def get_status():
    return 'API is working!'


@app.route('/login', methods=['POST'])
def post_login():
    email = request.form.get('email')
    password = request.form.get('password')

    user_object = session.query(User).filter(User.email == email).first()

    if user_object is not None and bcrypt.check_password_hash(user_object.password, password):
        # transforming into JSON-serializable objects
        schema = UserSchema(many=False, only=('email', 'role'))
        user = schema.dump(user_object)

        # serializing as JSON
        session.close()
        access_token = create_access_token(identity=user)

        return jsonify(access_token=access_token)
    else:
        return 'Invalid email or password', 401


@app.route("/logout", methods=["DELETE"])
@jwt_required()
def logout():
    # TODO: here!
    return jsonify(msg="Access token revoked")


@app.route('/register', methods=['POST'])
@jwt_required()
def register_user():
    email = request.form.get('email')
    password = request.form.get('password')
    role = request.form.get('role')
    user_uuid = uuid_library.uuid1()

    password_hash = bcrypt.generate_password_hash(password).decode('utf-8')

    user = User(user_uuid, email, password_hash, role, "HTTP post request")

    user_object = session.query(User) \
        .filter(User.email == email) \
        .first()

    if user_object is None:
        # persist exam
        session.add(user)
        session.commit()
        session.close()
        return jsonify('User has been registered'), 201
    else:
        session.close()
        return 'User with this email already exists', 400


@app.route('/user/<email>', methods=['DELETE'])
@jwt_required()
def delete_user(email):
    user_object = session.query(User) \
        .filter(User.email == email) \
        .first()

    if user_object is not None:
        session.delete(user_object)
        session.commit()
        session.close()

        return jsonify('User has been deleted'), 200
    else:
        session.close()
        return 'User does not exists', 400


@app.route('/users', methods=['GET'])
@jwt_required()
def get_all_users():
    current_user = get_jwt_identity()
    if current_user['role'] == 'admin':
        user_objects = session.query(User).all()

        schema = UserSchema(many=True)
        users = schema.dump(user_objects)

        session.close()
        return jsonify(users)
    else:
        return 'Not authorized', 401


if __name__ == '__main__':
    app.run(debug=True)
EN

回答 1

Stack Overflow用户

发布于 2022-02-22 19:06:11

你得把记号列入黑名单。对于黑名单,您必须在数据库中创建一个表,并存储黑名单中的令牌,并检查views.You可以将令牌存储在客户端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71226792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档