美文网首页
flask使用session验证和使用token验证

flask使用session验证和使用token验证

作者: Odven | 来源:发表于2020-05-21 16:13 被阅读0次

1) flask使用session验证一般都是web开发

1. 第一次客服端使用用户名,密码登陆 。服务端如果验证通过,一般会保存用户ID,用户名等信息到session并设置过期时间,并返回session_id给客服端。
2. 以后在session没过期的情况下可以使用session机制验证。
3. 如果客服端清理了session_id或服务端清理了对应的session空间就不能用session机制了,要重新开始。

def login_required(view_func):

    @functools.wraps(view_func)  #
    def wrapper(*args, **kwargs):
        # 判断用户的登录状态
        user_id = session.get('user_id')
        # 如果未登录,返回未登录的信息
        if not user_id:
            return jsonify(code = 10001, msg='用户未登录')
        # 如果用户是登录的,执行视图函数
        g.user_id = user_id
        return view_func(*args, **kwargs)
    return wrapper

2) flask使用token验证一般都是手机app开发

1. 第一次客服端使用用户名,密码登陆 。服务端如果验证通过,一般会保存用户ID,用户名等信息到自己生成的token中并设置过期时间,并返回token给客服端。
2. 以后在token没过期的情况下可以使用token机制验证。
3. 如果客服端清理了token数据就不能用token机制了,要重新开始。

#导入依赖包
import functools
from flask import request,jsonify,current_app, jsonify, g
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

app = Flask(__name__)

# 生成token
def create_token(user_id):
    '''
    :param user_id: 用户id
    :return: token
    '''
    #第一个参数是内部的私钥,这里写在共用的配置信息里了
    s = Serializer(current_app.config["SECRET_KEY"],expires_in=18000)
    token = s.dumps({"id": user_id}).decode("ascii")
    return token


# 校验token
def verify_token(token):
    '''
    :param token: 
    :return: user_id or None
    ''' 
    #参数为私有秘钥,跟上面方法的秘钥保持一致
    s = Serializer(current_app.config["SECRET_KEY"])
    try:
        #转换为字典
        data = s.loads(token)
    except Exception:
        return None

    user_id = data.get("id")
    return user_id


# 使用装饰器写一个必须携带token的校验
def login_required(view_func):
    @functools.wraps(view_func)
    def verify_token(*args,**kwargs):
        token = request.headers.get("access-token")
        if not token:
            return jsonify(code = 10000,msg = '缺少参数token')
    
        s = Serializer(current_app.config["SECRET_KEY"])
        try:
            data = s.loads(token)
        except Exception:
            return jsonify(code = 10001,msg = "token已无效")

        g.user_id = data.get("id")
        return view_func(*args,**kwargs)

    return verify_token

相关文章

  • flask使用session验证和使用token验证

    1) flask使用session验证一般都是web开发 2) flask使用token验证一般都是手机app开发

  • springboot 结合Token的使用

    Token和session的都是用于身份的验证,而session需要存储空间,Token并不需要,这次使用的主要是...

  • Session和Token区别

    在面试中被问到。为什么要token验证,而不是使用session?除了session存储在cookies中,非浏览...

  • 认证,令牌

    session方法; Token方法: base64url转码格式 使用jwt实现身份验证

  • 笔记php

    验证码制作 $_SESSION使用

  • 基于Spring Boot 的RESTful权限认证

    1. 使用Token进行身份鉴权 网站应用一般使用Session进行登录用户信息的存储及验证,而在移动端使用Tok...

  • 7.登录验证和登出

    一、FBV 方式1.1 登录验证并加入 session用户登录时,使用 authenticate 验证用户名和密码...

  • token身份验证机制

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

  • PHP之验证码制作

    php实现字母验证码 php通过session存储验证信息 验证码通过表单提交、校验 使用js实现动态校验验证码

  • 使用SpringSecurity验证token

    一、Controller层 二、Service层 我们从AuthenticationManager接口的实现类作为...

网友评论

      本文标题:flask使用session验证和使用token验证

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