当前位置: 首页 > news >正文

Flask-Sockets和Flask-Login联合实现websocket的登录认证功能

flask_login 提供了一个方便的方式来管理用户会话。当你在 Flask 的 HTTP 视图中使用它时,你可以简单地使用 @login_required 装饰器来确保用户已登录。

但是,flask_sockets 并没有直接与 flask_login 集成。如果你想在建立 WebSocket 连接时检查用户是否已登录,你需要采取一些额外的步骤。

以下是一个示例,说明如何在 flask_sockets 路由中使用 flask_login 进行身份验证:

  1. 初始化 Flask、Flask-Login 和 Flask-Sockets
from flask import Flask, request, session
from flask_login import LoginManager, current_user, UserMixin, login_required
from flask_sockets import Socketsapp = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
sockets = Sockets(app)
login_manager = LoginManager()
login_manager.init_app(app)
  1. 定义用户模型和加载用户的回调
class User(UserMixin):# For simplicity, this example does not use a real database.# Instead, it uses this dictionary to simulate user data.users = {"1": {"id": "1", "username": "user1", "password": "pass1"}}def __init__(self, id_, username):self.id = id_self.username = username@classmethoddef get(cls, id_):user_data = cls.users.get(id_)if not user_data:return Nonereturn User(id_=user_data["id"], username=user_data["username"])@login_manager.user_loader
def load_user(user_id):return User.get(user_id)
  1. 定义 WebSocket 路由并检查登录状态

为了检查用户是否已登录,我们会读取 Flask 的会话数据,因为 flask_login 在其中存储了有关用户身份的信息。

@sockets.route('/socket')
def chat_socket(ws):# Flask's context might not be available in the WebSocket route,# so we manually load the user using Flask-Login's method.user = load_user(session.get("user_id"))# If user is not loaded (i.e., not logged in), we close the connection.if user is None:ws.close(reason="User not logged in.")returnwhile not ws.closed:message = ws.receive()if message:ws.send(f"Hello {user.username}, you said: {message}")
  1. 创建一些基本的登录和注销路由
from flask import render_template, redirect, url_for, request@app.route('/login', methods=["GET", "POST"])
def login():if request.method == "POST":username = request.form.get("username")password = request.form.get("password")user = [u for u in User.users.values() if u["username"] == username and u["password"] == password]if user:user = User.get(user[0]["id"])login_user(user)return redirect(url_for("index"))return render_template("login.html")@app.route('/logout')
@login_required
def logout():logout_user()return redirect(url_for("login"))@app.route('/')
@login_required
def index():return "Logged in as " + current_user.username
  1. 运行应用程序
if __name__ == "__main__":from gevent.pywsgi import WSGIServerfrom geventwebsocket.handler import WebSocketHandlerserver = WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)server.serve_forever()

注意:在上述代码中,我们手动加载用户并检查他们是否已登录,而不是使用 @login_required 装饰器。在 WebSocket 路由中,由于 Flask 的请求上下文可能不可用,所以这是必要的。

相关文章:

Flask-Sockets和Flask-Login联合实现websocket的登录认证功能

flask_login 提供了一个方便的方式来管理用户会话。当你在 Flask 的 HTTP 视图中使用它时,你可以简单地使用 login_required 装饰器来确保用户已登录。 但是,flask_sockets 并没有直接与 flask_login 集成。如果你想在建立 WebSocket 连接时检查用户是否…...

东盟全面覆盖?长城战略部署核心区域市场,首个百万粉丝国产品牌

根据最新消息,长城汽车在东南亚地区取得了巨大的成功,成功进军了亚洲最大的汽车市场之一-印度尼西亚。这标志着长城汽车已经实现了东盟核心市场的全面覆盖,成为全球布局的重要一步。 在过去的几年里,长城汽车在东盟地区的市场布局…...

基于PHP的电脑商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的电脑商城系统 一 介绍 此电脑商城系统基于原生PHP开发,数据库mysql,前端bootstrap。用户可注册登录,购物下单,评论等。管理员登录后台对电脑商品,用户,订单&a…...

无客户端网络准入方案,为集成电路企业终端管理开启省事更省心模式

宁盾无客户端网络准入控制方案正在成为先进制造、高科技互联网企业等创新型客户的优选方案。创新型客户以技术密集型、研发人员占比高著称,在进行网络准入建设时,如何平衡好用户体验与顺利达成项目预期之间的矛盾,是创新企业 IT 安全团队格外…...

5G与4G的RRC协议之异同

什么是无线资源控制(RRC)? 我们知道,在移动通信中,无线资源管理是非常重要的一个环节,首先介绍一下什么是无线资源控制(RRC)。 手机和网络通过无线信道相互通信,彼此交…...

横扫“盲区”、“看透”缺陷,维视智造推出短波红外相机

在可见光领域,工业相机的视觉应用已经十分成熟,但在日常的客户咨询中,我们也经常接到一些“超纲需求”——客户想要检测“白底上的白色缺陷”、“不透明包装内的透明物体有无”等,均属于可见光无法实现的检测,而市面上…...

cgo踩坑:交叉编译过程出现的问题could not determine kind of name for C.XXX

尝试了网上的几种解决方法&#xff0c;都不行&#xff0c;现总结起来&#xff1a; 确认 /* #include <stdio.h> */ import "C"不要有空行 确认你引用的头文件存在&#xff08;stdio.h这种编译器自带的不需要你确认&#xff09; 如果引用了多个包&#xff0c…...

自然语言处理(NLP)技术的例子

以下是几个自然语言处理&#xff08;NLP&#xff09;技术的例子&#xff1a; 机器翻译&#xff1a;机器翻译是将一种自然语言的文本转换成另一种语言的文本的过程。这种技术应用于在线翻译器、多语言聊天机器人、多语言搜索引擎等地方。 文本分类&#xff1a;文本分类将文本分…...

Python“牵手”义乌购商品列表数据,关键词搜索义乌购API接口数据,义乌购API接口申请指南

义乌购平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;义乌购API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问义乌购平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现义…...

ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_IN

文章目录 ip_vs hook 后NF_INET_LOCAL_IN 本章重点&#xff1a; k8s 如何利用 ip_vs 实现源 IP 会话亲和性。 ip_vs hook 后 NF_INET_LOCAL_IN 根据优先级依次是 ip_vs_reply4&#xff0c;ip_vs_remote_request4 ip_vs_reply4| -- ip_vs_out| -- skb_to_full_sk(skb&#xf…...

分布式之CAP理论与BASE理论

CAP理论 CAP:一致性&#xff08;consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错&#xff08;partition-tolerance&#xff09;。CAP定律说的是在一个分布式计算机系统中&#xff0c;一致性&#xff0c;可用性和分区容错性这三种保证无法同时…...

Java之初始化顺序实践

功能概述 在创建Java对象时&#xff0c;需要将对象中的成员变量进行初始化后&#xff0c;才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。 功能实践 场景1&#xff1a;父类、子类的初始化顺序 用例代码 Test public void test_init_order(…...

静态库与动态链接库,第三方库集成到VS

目录 介绍静态库与动态链接库静态库动态链接库 如何将第三方库集成到VS上VS属性管理器配置静态库配置动态链接库属性管理器其他的内容MKL库的安装boost库的安装 介绍 众所周知&#xff0c;.c文件或者.cpp文件变成.exe文件需要经历四个过程 分别是预处理&#xff0c;编译&#…...

生态经济学领域里的R语言机器学(数据的收集与清洗、综合建模评价、数据的分析与可视化、数据的空间效应、因果推断等)

近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c;目前也在飞快的融入计量经济学研究。表面上机器学习通常使用大数据&#xf…...

【ROS】自定义消息方面的bug总结(1)

根据需要创建功能包 一类引用ros库函数的一类是自己定义的消息类型 库函数中有的可以直接在创建功能包的时候添加依赖&#xff0c;也可以在CMakeLists.txt中手动添加 catkin_create_pkg crepes roscpp rospy std_msgs nav_msgs sensor_msgs geometry_msgs创建文件夹msg&#xf…...

CTF-XXE(持续更新,欢迎分享更多相关知识点的题目)

知识 实例 BUU [PHP]XXE 进来看到 然后一起看 Write BUU XXE COURSE 1 进来看到 一起看 write NSS [NCTF2019]Fake XML cookbook 反正是XXE 直接整 write [NCTF 2019]True XML cookbook 不整花里胡哨&#xff0c;解题在最下面 write 与博主不同&#xff0c;我通过…...

Python工具箱系列(四十一)

使用zip批量压缩文件 前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库&#xff0c;使用起来非常方便。废话不说&#xff0c;直接上代码示例。 import dbm import glob import zipfile# 保存压缩计划的库名…...

Bigemap在路桥行业是怎么应用的?

选择Bigemap的原因&#xff1a; 奥维下架了&#xff0c;后来了解到的bigemap&#xff0c;于是测试了这款软件 使用场景&#xff1a; 下载影像、矢量路网做前期策划&#xff0c;下载完数据后导出cad ,做一些标注&#xff0c;最终出图下载等高线&#xff0c;作为前期选址依据 …...

代码随想录算法训练营Day48 || ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

问题1&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上…...

高通面临难题,Oryon核心存在问题,高通8cx Gen 4芯片将推迟发布

"高通公司面临难题&#xff0c;可能会导致骁龙8cx Gen 4的发布时间推迟"&#xff0c;关于骁龙8cx Gen 4处理器&#xff0c;还有一些其他值得关注的特点和功能。首先&#xff0c;据悉&#xff0c;骁龙8cx Gen 4采用了高通自家研发的Oryon核心架构&#xff0c;这是一项…...

OpenClaw性能测试:Qwen3.5-4B-Claude处理百页文档实测

OpenClaw性能测试&#xff1a;Qwen3.5-4B-Claude处理百页文档实测 1. 测试背景与目标 上周我在整理一个开源项目的技术文档时&#xff0c;遇到了一个头疼的问题——这份文档长达137页&#xff0c;包含了代码示例、架构图和版本变更说明。手动梳理关键信息耗费了我整整两天时间…...

VMware Unlocker:在非苹果硬件上运行macOS虚拟机的完整解决方案

VMware Unlocker&#xff1a;在非苹果硬件上运行macOS虚拟机的完整解决方案 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker是一个开源工具&#xff0c;专门解决在非苹果硬件上使用VMware虚拟机运行macOS系统时的…...

雀魂智能辅助:从零构建你的AI麻将教练系统

雀魂智能辅助&#xff1a;从零构建你的AI麻将教练系统 【免费下载链接】Akagi A helper client for Majsoul 项目地址: https://gitcode.com/gh_mirrors/ak/Akagi 想在雀魂对局中获得实时AI分析与策略指导&#xff1f;雀魂智能辅助系统通过深度学习技术&#xff0c;为玩…...

nanobot实操手册:Qwen3-4B模型温度(temperature)、top_p、max_tokens参数详解

nanobot实操手册&#xff1a;Qwen3-4B模型温度&#xff08;temperature&#xff09;、top_p、max_tokens参数详解 1. nanobot简介与快速上手 nanobot是一款超轻量级的个人人工智能助手&#xff0c;灵感来源于OpenClaw项目。它最大的特点是代码量极小&#xff0c;仅需约4000行…...

OpenClaw故障排查大全:GLM-4.7-Flash接口超时与网关启动失败

OpenClaw故障排查大全&#xff1a;GLM-4.7-Flash接口超时与网关启动失败 1. 问题背景与典型症状 最近在本地部署OpenClaw对接GLM-4.7-Flash模型时&#xff0c;遇到了两个棘手问题&#xff1a;接口调用频繁超时和网关服务启动失败。作为一个习惯用技术解决实际问题的开发者&am…...

【大模型工程实践③】RAG 基础架构与完整实现

【大模型工程实践③】RAG 基础架构与完整实现:从0到1跑通 作者:AI学习者 | 来源:大模型工程实践学习系列 | 更新:2026年3月 【理论要点速览】 学习本篇前,建议先掌握以下核心理论(点击跳转): ① 为什么需要RAG? ② RAG vs Fine-tuning vs Long Context的决策框架 ③ …...

手把手教你用XCVU3P和FMC+接口搭建高性能PCIe载板(附原理图下载)

基于XCVU3P与FMC的高性能PCIe载板开发实战指南 在当今高速数据处理领域&#xff0c;FPGA因其并行计算能力和可重构特性成为关键器件。Xilinx UltraScale系列的XCVU3P芯片配合FMC扩展接口&#xff0c;为开发者提供了强大的硬件加速平台。本文将深入解析如何从零开始构建一个支持…...

从锡膏印刷到炉温曲线:手把手调试你的第一条SMT生产线(避坑指南)

从锡膏印刷到炉温曲线&#xff1a;手把手调试你的第一条SMT生产线&#xff08;避坑指南&#xff09; 第一次接手SMT生产线调试时&#xff0c;我盯着那台二手贴片机的报警提示&#xff0c;手心全是汗。钢网上残留的锡膏像在嘲笑我的无知&#xff0c;而流水线上堆积的PCB板则不断…...

手把手教你用Node.js和Bun配置Cursor AI与Figma的MCP通信(附完整避坑清单)

从零构建Cursor AI与Figma的MCP通信桥梁&#xff1a;Node.jsBun全链路配置指南 当设计工具与AI代码助手实现双向通信时&#xff0c;创意工作流将迎来革命性变化。本文面向具备Node.js基础的前端/全栈开发者&#xff0c;深入解析如何搭建Cursor AI与Figma间的MCP协议通信通道。…...

VScode 高效开发 Springboot 应用的完整指南

1. 环境准备与项目创建 第一次用VScode开发Springboot项目时&#xff0c;我对着空白编辑器发呆了半小时。后来发现只要装对插件&#xff0c;效率能翻倍。先打开VScode的扩展商店&#xff0c;这三个插件是必装的&#xff1a; Java Extension Pack&#xff1a;包含语言支持、调…...