资讯专栏INFORMATION COLUMN

干货!flask登录注册token验证接口开发详解

yimo / 1476人阅读

今天给大家献上登录注册接口开发,是基于token验证的。咱们闲言少叙,进入正题!

首先看一下数据库模型:

#pip install passlib
from passlib.apps import custom_app_context as pwd_context
class Shop_list(db.Model):
    __tablename__ = "shop_list"
    userName = db.Column(db.BigInteger,primary_key = True) #手机号
    passWord = db.Column(db.Text,nullable=False)
    def hash_password(self, password): #给密码加密方法
        self.passWord = pwd_context.encrypt(password)
 
    def verify_password(self, password): #验证密码方法
        return pwd_context.verify(password, self.passWord)

 结构非常简单,给大家做个demo,下面的两个方法是加密和验证密码的,记住就行

接下来看一下注册接口:

@app.route("/api/v1/admin/register",methods=["POST"])
def register():
    username = request.form.get("username")
    password = request.form.get("password")
    save = Shop_list(userName=username)
    save.hash_password(password) #调用密码加密方法
    db.session.add(save)
    db.session.commit()
    return "success"

这个也没啥可解释的,先介绍数据在保存就完事了

 接下来是登录接口

@app.route("/api/v1/admin/login",methods=["POST"])
def login():
    username = request.form.get("username")
    password = request.form.get("password")
    obj = Shop_list.query.filter_by(userName=username).first()
    if not obj:
        return res_json(201,"","未找到该用户")
    if obj.verify_password(password):
        token = generate_token(username)
        return res_json(200,{"token":token},"登录成功")
    else:
        return res_json(201,"","密码错误")

解释:res_json是我封装的返回json数据的函数 ,generate_token是生成token的函数

重头戏:token的生成与验证方法

import time
import base64
import hmac
#生成token 入参:用户id

def generate_token(key, expire=3600):
    ts_str = str(time.time() + expire)
    ts_byte = ts_str.encode("utf-8")
    sha1_tshexstr  = hmac.new(key.encode("utf-8"),ts_byte,"sha1").hexdigest() 
    token = ts_str+":"+sha1_tshexstr
    b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))
    return b64_token.decode("utf-8")
#验证token 入参:用户id 和 token
def certify_token(key, token):
    token_str = base64.urlsafe_b64decode(token).decode("utf-8")
    token_list = token_str.split(":")
    if len(token_list) != 2:
        return False
    ts_str = token_list[0]
    if float(ts_str) < time.time():
        # token expired
        return False
    known_sha1_tsstr = token_list[1]
    sha1 = hmac.new(key.encode("utf-8"),ts_str.encode("utf-8"),"sha1")
    calc_sha1_tsstr = sha1.hexdigest()
    if calc_sha1_tsstr != known_sha1_tsstr:
        # token certification failed
        return False 
    # token certification success
    return True

就是这么简单,你学会了吗?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42706.html

相关文章

  • Python Flask单点登录问题

    摘要:如果一旦加密算法泄露了,攻击者可以在本地建立一个实现了登录接口的假冒父应用,通过绑定来把子应用发起的请求指向本地的假冒父应用,并作出回应。 1.什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。客户端持有ID,服务端持有session...

    tuomao 评论0 收藏0
  • Laravel Socialite 详解

    摘要:这样,让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。 不久之前 Dearmadman 曾写过一篇 使用 Laravel Socialite 集成微信登录 的文章,但是似乎还是有些同学不太明白,询问着如何集成 QQ 登录,那么,本篇我们就来剖析一下 Laravel Socialite 的详细内容。让各位同学都获得 Laravel Socialite 所...

    yuanxin 评论0 收藏0
  • Koa2微信公众号开发(一) 本地开发调试环境搭建

    摘要:本篇是该系列的第一篇,本地开发环境搭建以及接入微信。若确认此次请求来自微信服务器,原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 一、简介 关于微信公众号的介绍就省略了,自行搜索。注册过程也不说了。我们会直接注册测试号来实现代码。这将会是个全面讲解微信公众号开发的系列教程。本篇是该系列的第一篇,本地开发环境搭建以及接入微信。在开始之前最好去看看开发者文档微信公众平台技术文...

    snifes 评论0 收藏0
  • actor im 中 多种登录机制的设定

    摘要:收到验证码后使用验证码登录注册。其中,是设备和命名的。是登录前的安全验证机制,登录完删除。在用户未收到短信的情况下,再次调用此函数发起电话回呼通知验证码。完成认证请求响应。响应认证成功后返回信息。结束认证会话注销单个会话。 1.API认证接口定义 认证目前只支持一种方式:短信或电话回呼。(译注:此处不准确,起码还要邮箱等其他方式。)认证步骤: 调用RequestAuthCode请求验...

    Jacendfeng 评论0 收藏0
  • vue开发项目完全指南

    摘要:有两种方法,一种是在开发环境中设置通过的,另一种是在服务器上修改的配置设置。这样我们以后使用访问接口就可以不加了,打包后访问也不用手动去除统一管理在项目开发过程中,会涉及到很多接口的处理,当项目足够大时,就需要统一管理接口。 这篇文章总结了vue项目的所遇到的问题,包括跨域、用户认证、接口统一管理、路由配置、兼容性处理,性能优化等内容。 项目github地址 : 前端 https:...

    leoperfect 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<