美文网首页
flask-login token验证方案

flask-login token验证方案

作者: 如果的if | 来源:发表于2019-11-18 22:34 被阅读0次

需求:

  1. 小程序或者webapi的token验证,所以token需要放到header里面
  2. 需要复用flask-login内置 login_required用于验证已登录

原理:

在进行login_required权鉴的时候,flask-login 有3种验证方式

  1. login_manager.user_loader

其实就是session验证,小程序或者webapi不太实用

  1. login_manager.request_loader

验证信息放入到request对象,request对象可以从header,body,values等等中获取,很灵活

  1. login_manager.header_loader

从header中获取验证,使用起来与session一致

选型:

由于需要放到header里面,所有只能选2、3方案。
再者,token字段为自定义且内容也是自定义,所以直接选2(方案3要走弯路。。。)

代码:

伪代码app.py

from flask import Flask,request,jsonify,redirect,url_for
from flask_login import login_user,login_required,logout_user
from exts import loginManager
from models import UserModel

app = Flask(__name__)
# 123是加密key,你可以随意
app.config['SECRET_KEY'] = '123'
loginManager.init_app(app=app)

# 登录页面,验证用户名就行了
@app.route('/login')
def login():
    if request.values.get('username') == 'admin':
        user = UserModel()
        user.id = 0
        user.username = 'admin'
        user.password = 'admin'
        # 123是伪代码,可以根据具体情况生成token
        token = '123'        
        return redirect(url_for('home',token=token))
    return redirect(url_for('index'))

# 需要权限的home页面,成功后会跳转
@app.route('/home')
@login_required
def home():
    return '<h1>home</h1><a href="./logout">退出</a>'

@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('index'))

@app.route('/')
def index():
    return '<a href="./login?username=admin">跳转登录</a>'


# 这个地方最重要,用于验证当前的token是否已经登录
@loginManager.request_loader
def user_loader(request):
    token = request.values.get('token')
    # 伪代码,用于验证token,具体看自己的业务
    if token == '123':
        user = UserModel()
        user.id = id
        user.username = 'admin'
        user.password = 'admin'
        return user

伪代码exts.py

from flask_login import LoginManager,UserMixin
from flask_sqlalchemy import SQLAlchemy

db=SQLAlchemy()
loginManager = LoginManager()

伪代码models.py

from exts import db,UserMixin

class UserModel(db.Model,UserMixin):
    id = db.Column(db.Integer,primary_key = True)
    username = db.Column(db.String)
    password = db.Column(db.String)

结束

令牌生成可以使用这个类,百度简单搜索看一下就ok了

from itsdangerous import TimedJSONWebSignatureSerializer 

相关文章

  • flask-login token验证方案

    需求: 小程序或者webapi的token验证,所以token需要放到header里面 需要复用flask-log...

  • 基于token的身份验证-2.0版本

    相关 之前写过关于token的文章Token - 服务端身份验证的流行方案,是基于当时的实现方案来写的。后来进行了...

  • token身份验证机制

    作用: 替代 session 的身份验证方案 运行过程: token相对cookie, session 的优点 :...

  • 基于JWT的token弱密钥爆破

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。直接根据token取出保存的用户信息,以...

  • Spring Boot 使用Filter进行token鉴权

    最近在做鉴权相关,采用JWT(JAVA WEB TOKEN)方案进行token验证。于是想创建一个过滤器拦截tok...

  • jwt

    jwt简介 JSON Web Token(JWT)是非常流行的跨域身份验证解决方案。 jwt构成 HEADER: ...

  • JWT简介

    前言 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。微服务常见的认证方案 一、跨域认证...

  • API安全设计

    方案一 (客户端token方式)客户端生成token传给服务端校验,一致就通过用户验证。 通过时间戳+用户唯一标识...

  • JWT,JSON Web令牌

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。 正常的跨域身份验证流程 1.用户向服务...

  • Vue 后台管理项目5-登录状态判断(token令牌)

    登录状态判断(token令牌) 1.token令牌 Ⅰ.传统身份验证的方法: Ⅱ.基于 Token 的身份验证方法...

网友评论

      本文标题:flask-login token验证方案

      本文链接:https://www.haomeiwen.com/subject/utriictx.html