flask token 登录验证

flask token 登录验证

视频

https://www.youtube.com/watch?v=J5bIPtEbS0Q

代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@Introduce : flask token 实例
@File      : jwt_token.py
@Time      : 2020-12-22 17:40
@Author    : xia hua dong
@Tel       : 173 179 76823
@Email     : 17317976823@163.com
@pip       : pip install PyJWT==1.7.1
             pip install flask
"""
# flask不兼容pyjwt2.0.0,所以要安装pyjwt1.7.1
from flask import Flask, jsonify, request, make_response  # 导入flask
import jwt
import datetime
from functools import wraps  # 编写装饰器

app = Flask(__name__)  # 创建app
app.config['SECRET_KEY'] = 'thisisthesecretkey'  # 设置密钥


def token_required(f):  # token验证函数
    @wraps(f)
    def decorated(*args, **kwargs):  # 写装饰器
        token = request.args.get('token')  # 127.0.0.1:5000/protected?token=eyJ0eXAiO...
        if not token:
            return jsonify({'message': '没有token'}), 403
        try:
            data = jwt.decode(token, app.config['SECRET_KEY'])
            print('data:', data)
        except:
            return jsonify({'message': 'token错误或过期'}), 403
        return f(*args, **kwargs)

    return decorated


@app.route('/unprotected')  # 不受保护的路径
def unprotected():  # 不受保护的函数
    return jsonify({'message': '任何人都可以查看'})


@app.route('/protected')  # 受保护的路径
@token_required  # 使用token验证装饰器
def protected():  # 受保护的函数
    return jsonify({'message': 'token验证成功'})


@app.route('/login', methods=['POST'])  # 登录的路径
def login():
    user = request.form.get('user')  # 表单请求(可以用postmen模仿)
    # print(datetime.datetime.utcnow() + datetime.timedelta(minutes=30))
    if user == 'user':  # 如果有报头,并且user是user
        token = jwt.encode({  # token编码
            'user': user,  # 设置用户名
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)  # 设置过期时间为30分钟
        },
            app.config['SECRET_KEY']  # 设置密钥
        )
        return jsonify({'token': token.decode('UTF-8')})  # 返回token
    return '没有通过验证!'


if __name__ == '__main__':
    app.run(debug=True)  # 运行flask
Flask框架中开发用户登录页面,首先需要安装Flask及其相关库,如Flask-WTF用于处理表单。以下是一个简单的步骤: 1. **设置项目**: 创建一个新的Python文件,例如`app.py`,导入所需的模块: ```python from flask import Flask, render_template, request, redirect, url_for, flash from flask_wtf import FlaskForm ``` 2. **初始化Flask应用**: 初始化Flask应用并配置模板目录: ```python app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key' app.jinja_env.auto_reload = True app.config['TEMPLATES_AUTO_RELOAD'] = True ``` 3. **创建表单类**: 使用Flask-WTF创建一个用户登录表单类: ```python class LoginForm(FlaskForm): username = StringField('用户名') password = PasswordField('密码') submit = SubmitField('登录') ``` 4. **路由和视图函数**: 设置登录页面的URL和对应的视图函数,比如`login`: ```python @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): # 这里通常会将用户输入验证,并进行数据库查询等操作 # 如果验证通过,可以跳转到主页或其他安全页面 return redirect(url_for('index')) else: flash('登录失败,请检查您的信息。', category='danger') return render_template('login.html', form=form) ``` 5. **HTML模板**: 创建`templates/login.html`,包含登录表单: ```html <form method="post"> {{ form.csrf_token }} <div> {{ form.username.label }}<br> {{ form.username(class_='form-control') }} </div> <div> {{ form.password.label }}<br> {{ form.password(class_='form-control') }} </div> {{ form.submit(class_='btn btn-primary') }} </form> ``` 6. **运行应用**: 最后,在`if __name__ == '__main__':`块中启动Flask应用: ```python if __name__ == '__main__': app.run(debug=True) # 用于开发环境,生产环境需配置其他服务器 ``` 注意:这只是一个基础示例,实际开发中还需要考虑安全性问题,比如密码加密存储、防止CSRF攻击等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值