python flask token_Flask 用户名密码登录获取token
# 简单的用户名密码登录获取token的方式
import logging
from flask import Flask, request, g, make_response, jsonify
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, BadSignature, SignatureExpired
# from flask_restful import Api, Resource
app = Flask(__name__)
# 用户名密码方式认证,仅用于登录
basic_auth = HTTPBasicAuth()
# Token方式认证
token_auth = HTTPTokenAuth(scheme="Bearer")
users = [
{'username': 'Tom', 'password': '111111'},
{'username': 'Michael', 'password': '123456'}
]
# 用户登录后的token字典
# tokens={'id1': 'token1', 'id2': 'token2','id3': 'token3'}
tokens = {}
# 定义token加密、过期时间、盐SALT。例如SECRET_KEY="很长的一段密码" TOKEN_EXPIRATION=7200(为了验证有效期设为30秒) SALT= "我加的盐"
SECRET_KEY = "很长的一段密码"
TOKEN_EXPIRATION = 30
SALT = "我加的盐"
# token序列化签名方法
token_serializer = Serializer(SECRET_KEY, TOKEN_EXPIRATION)
# 创建token ,将生成的token添加到tokens列表中,这里用户名为id。如用户id存在,则更新token,旧token失效,不存在则生成新token,添加到tokens字典中
# 验证用户名密码是否正确
@basic_auth.get_password
def get_password(username):
for user in users:
if user['username'] == username:
return user['password']
return None
'''
# 登录成功返回成功信息,data中包含token(basic_auth仅用于登录)
# PostMan中调试Authorization中选择Basic Auth,输入用户名密码。
# curl --location --request POST 'http://127.0.0.1:5000/login' --header 'Authorization: Basic VG9tOjExMTExMQ=='
# 登录通过后根据用户名生成token
'''
@app.route('/login', methods=['POST'])
@basic_auth.login_required
def index():
token = create_token(basic_auth.username())
return jsonify({'code': 1, 'msg': 'success', 'data': token})
# 登录失败返回错误信息(basic_auth仅用于登录,实际包含error_handler所有basic_auth认证错误)
@basic_auth.error_handler
def errornamepaswoed():
return make_response(jsonify({'code': 0, 'msg': 'Failed', 'data': '错误的用户名或密码'}), 401)
def create_token(username):
token = token_serializer.dumps({'username': username}, SALT)
app.logger.debug(token)
tokens[username] = token
return token.decode('ascii')
# token 认证
# token loads后解析的是签名字典 {'username': 'Tom'},经过时效和错误签名验证后,检查当前用户名data['username']——即Tom是否在tokens字典中。Tom为示例用户名。
# 除用户名外,可以更多的签名,create_token生成token的签名(字典)和验证比较的签名要一致
@token_auth.verify_token
def verify_token(token):
g.user = None
app.logger.debug(token)
try:
data = token_serializer.loads(token, SALT)
except SignatureExpired:
app.logger.debug('SignatureExpired')
return False # valid token, but expired
except BadSignature:
app.logger.debug('BadSignature')
return False # invalid token
except:
return False
app.logger.info(data)
if 'username' in data:
app.logger.debug("data['username']:"+data['username'])
if data['username'] in tokens:
g.user = data['username']
return True
else:
return False
@token_auth.error_handler
def errortoken_auth():
return make_response(jsonify({'code': 0, 'msg': 'Failed', 'data': '令牌无效'}), 401)
tasks = [
{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]
# token接口范例
@app.route('/tasks', methods=['GET'])
@token_auth.login_required
def get_tasks():
return jsonify({'tasks': tasks})
if __name__ == "__main__":
app.run(debug=True)
handler = logging.FileHandler('flask.log', encoding='UTF-8')
handler.setLevel(logging.DEBUG)
logging_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
python flask token_Flask 用户名密码登录获取token相关推荐
- spring oauth2 实现用户名密码登录、手机号验证码登录返回token
文章目录 介绍 实现功能 用户名密码登录 步骤 编写成功处理器 配置成功处理器 手机号验证码登录 步骤 重写SmsCodeAuthenticationSecurityConfig 测试 用户名密码登录 ...
- python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...
#-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...
- Python Flask微信小程序登录流程及登录api实现代码
1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...
- 谷粒商城笔记+踩坑(17)——【认证模块】登录,用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录
导航: 谷粒商城笔记+踩坑汇总篇 目录 5. 用户名密码登录 5.1[认证模块]登录业务 5.1.1 模型类,接收用户名密码 5.1.2 feign客户端新增登录功能 5.1.3 LoginContr ...
- SpringSecurity:密码登录与token登录过程理解
1. 用户名密码登录 登录成功 输入用户名.密码点击登录后,我看到的流程 (1)先经过UsernamePasswordAuthenticationFilter中的attemptAuthenticati ...
- GitLab: 使用用户名/密码创建Access Token的暂定方法
GitLab升级到后续的版本之后,由于Session API已经不再支持,通过用户名/密码方式获取Access Token的方式需要换一种方式,这篇文章介绍一下一种通过使用cookie获取的方式. 原 ...
- Uni-app 手机号+验证码登录 用户名密码登录登出
用户名密码登录,手机号登录 用户名密码登录:用了uniapp+uview的$u.debounce防抖方法,再发送请求 判断正则以及同意条款勾选后,发起登录请求(参数是用户名和密码),如果请求成功--s ...
- 史上最简单的Spring Security教程(二十八):CA登录与默认用户名密码登录共存详细实现及配置
在前面的文章中,我们自定义了一些CA登录相关的类,如 CertificateAuthorityAuthenticationToken.CertificateAuthorityAuthenticati ...
- Django框架(五) 用户名密码登录
Django框架(五) 用户名密码登录 首先将setting.py中debug模式改为true 1.增加数据库 在acapp/game/models中建立player文件夹,创建__init__.py ...
- postman登录获取token,接口header中添加token发送请求
[Postman]登录获取token,接口header中添加token发送请求 说明 开始 说明 该文章只是用于记录,防止自己忘记. 开始 1.准备登录接口 2.添加全局变量 3.添加一个登录接口,登 ...
最新文章
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
- Java特性-Collection和Map
- MyEclipse下SVN的配置(下载及其配置)
- python --条件判断和语句控制
- ajax success function_【java 基础】java-回调函数(结合jquery.ajax)
- 回调函数的概念及使用
- 软件工程专业学python_笨办法学Python(0)
- javascript实现文件下载
- 操作系统课程设计之页面置换算法(流程模拟)
- stm32_跑马灯程序
- windows+7+32位java_深度技术windows7 32位专业版下载
- 若依设置匿名访问路径
- Android应用去广告方法盘点
- 升级iOS 16后续航时间变短了,如何提升续航?
- 基于javaweb物业管理系统的设计与实现/小区物业管理系统
- 中国数学家破解世界百年难题
- 有糖UTOUU网赚攻略
- C#,Winform 声音、音量控制操作
- 免费PR片头模板 多彩星星(粒子)特效PR片头模板
- Android获取GPS经纬度