0
点赞
收藏
分享

微信扫一扫

云原生(Cloud Native)

夹胡碰 2024-09-19 阅读 23

1. 介绍 

 

 

 

​​​​​​​ 

2. 验证

 

 

3. 代码


import datetime
import hashlib

from flask import (
    Flask, render_template, redirect, url_for, request,
    session, make_response, Response, current_app
)
from functools import wraps
from flask_jwt_extended import (
    JWTManager, create_access_token, set_access_cookies,
    get_jwt_identity, unset_jwt_cookies,
    jwt_required,
    verify_jwt_in_request,
)

from typing import Optional, Any
from flask_jwt_extended.view_decorators import LocationType





app = Flask(__name__)
app.secret_key = "ghakjhkghkahkhgkhalkfdngkasnkglhaj".encode('utf-8')

app.config['JWT_TOKEN_LOCATION'] = ["cookies"]

jwt = JWTManager(app)  # 初始化JWTManager


@app.route('/')
@app.route('/index', methods=["GET", "POST"])
# @auth  # 使用auth装饰器
@jwt_required()
def index():
    # 获取当前会话中的身份信息
    info = get_jwt_identity()
    return render_template('index.html', info=info)


@app.route('/login', methods=["GET", "POST"])
def login():
    if request.method == "POST":
        username = request.form.get('username', None)
        password = request.form.get('password', None)
        confirm_password = request.form.get('confirm_password', None)

        # 表单验证逻辑
        if not username or not password or not confirm_password:
            return render_template('login.html', errors="所有字段不能为空")
        if password != confirm_password:
            return render_template('login.html', errors="密码不一致")

        # 假设用户名和密码验证成功
        if username == "root" and password == "123":
            # 创建JWT token,只存储用户名
            access_token = create_access_token(identity=username)
            # 设置JWT到cookie并重定向到主页
            response = redirect(url_for('index'))
            set_access_cookies(
                response, access_token,
                # max_age=60 * 60 * 24 * 7  # 7天有效期
                max_age=datetime.timedelta(days=2)
            )
            return response
        else:
            return render_template('login.html', errors="账号或密码有误")

    return render_template('login.html')


@app.route('/logout', methods=["GET", "POST"])
# @auth
@jwt_required()
def logout():
    # 注销用户并删除JWT cookies
    response = redirect(url_for('login'))
    unset_jwt_cookies(response)
    return response


@app.route('/test')
# @auth
@jwt_required()
def test():
    return "测试成功"


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

举报

相关推荐

0 条评论