# 简单的用户名密码登录获取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相关推荐

  1. spring oauth2 实现用户名密码登录、手机号验证码登录返回token

    文章目录 介绍 实现功能 用户名密码登录 步骤 编写成功处理器 配置成功处理器 手机号验证码登录 步骤 重写SmsCodeAuthenticationSecurityConfig 测试 用户名密码登录 ...

  2. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  3. Python Flask微信小程序登录流程及登录api实现代码

    1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...

  4. 谷粒商城笔记+踩坑(17)——【认证模块】登录,用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录

    导航: 谷粒商城笔记+踩坑汇总篇 目录 5. 用户名密码登录 5.1[认证模块]登录业务 5.1.1 模型类,接收用户名密码 5.1.2 feign客户端新增登录功能 5.1.3 LoginContr ...

  5. SpringSecurity:密码登录与token登录过程理解

    1. 用户名密码登录 登录成功 输入用户名.密码点击登录后,我看到的流程 (1)先经过UsernamePasswordAuthenticationFilter中的attemptAuthenticati ...

  6. GitLab: 使用用户名/密码创建Access Token的暂定方法

    GitLab升级到后续的版本之后,由于Session API已经不再支持,通过用户名/密码方式获取Access Token的方式需要换一种方式,这篇文章介绍一下一种通过使用cookie获取的方式. 原 ...

  7. Uni-app 手机号+验证码登录 用户名密码登录登出

    用户名密码登录,手机号登录 用户名密码登录:用了uniapp+uview的$u.debounce防抖方法,再发送请求 判断正则以及同意条款勾选后,发起登录请求(参数是用户名和密码),如果请求成功--s ...

  8. 史上最简单的Spring Security教程(二十八):CA登录与默认用户名密码登录共存详细实现及配置

    ​在前面的文章中,我们自定义了一些CA登录相关的类,如 CertificateAuthorityAuthenticationToken.CertificateAuthorityAuthenticati ...

  9. Django框架(五) 用户名密码登录

    Django框架(五) 用户名密码登录 首先将setting.py中debug模式改为true 1.增加数据库 在acapp/game/models中建立player文件夹,创建__init__.py ...

  10. postman登录获取token,接口header中添加token发送请求

    [Postman]登录获取token,接口header中添加token发送请求 说明 开始 说明 该文章只是用于记录,防止自己忘记. 开始 1.准备登录接口 2.添加全局变量 3.添加一个登录接口,登 ...

最新文章

  1. Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
  2. Java特性-Collection和Map
  3. MyEclipse下SVN的配置(下载及其配置)
  4. python --条件判断和语句控制
  5. ajax success function_【java 基础】java-回调函数(结合jquery.ajax)
  6. 回调函数的概念及使用
  7. 软件工程专业学python_笨办法学Python(0)
  8. javascript实现文件下载
  9. 操作系统课程设计之页面置换算法(流程模拟)
  10. stm32_跑马灯程序
  11. windows+7+32位java_深度技术windows7 32位专业版下载
  12. 若依设置匿名访问路径
  13. Android应用去广告方法盘点
  14. 升级iOS 16后续航时间变短了,如何提升续航?
  15. 基于javaweb物业管理系统的设计与实现/小区物业管理系统
  16. 中国数学家破解世界百年难题
  17. 有糖UTOUU网赚攻略
  18. C#,Winform 声音、音量控制操作
  19. 免费PR片头模板 多彩星星(粒子)特效PR片头模板
  20. Android获取GPS经纬度

热门文章

  1. word压缩图片怎么弄_Word文档怎么压缩图片?Word图片压缩的方法介绍
  2. 1、贪心NLP——课程介绍及NLP概论
  3. 【MODIS数据处理#10】例五:用NDVI估算植被覆盖度
  4. 简单好听的id_简单好听的贴吧id名-网名搜索
  5. 【腾讯TMQ】有众测、不忐忑 ——记TBS内核测试优化之路
  6. 2019当今互联网赚钱的六大方式,赠送给迷茫的网赚新手
  7. 海尔计算机天越Y3的配置,海尔天越Y3S 拉近你与梦想的距离!
  8. Deepin安装教程
  9. html和css实现 字体变色 旋转 图标渐变
  10. transmac装黑苹果_黑苹果安装教程