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

黑客网站盗qq/磁力链搜索引擎入口

黑客网站盗qq,磁力链搜索引擎入口,vR网站建设程序,山东淄博网站建设公司前言 之前写了一篇关于chanlit如何实现登录授权文章 《Chainlit 实现自定Oauth2.0登录完整代码图文教程》 ,文章以为接入gitee OAuth授权为例,图文并茂介绍如何操作,并附带了完整代码示例。这次我们实现更有难度的事情,使用chanl…

前言

之前写了一篇关于chanlit如何实现登录授权文章 《Chainlit 实现自定Oauth2.0登录完整代码图文教程》 ,文章以为接入gitee OAuth授权为例,图文并茂介绍如何操作,并附带了完整代码示例。这次我们实现更有难度的事情,使用chanlit实现CAS中央用户登录授权,下面是完整教程。

教程

创建一个chainlit_sso的python项目

在这里插入图片描述

在项目文件下新建一个requirements.txt 依赖管理文件

配置如下:

chainlit~=2.2.1
requests
fastapi~=0.115.11
httpx~=0.28.1
starlette~=0.41.3

在命令行里输入安装依赖命令

(.venv) PS D:\PycharmProjects\chainlit_oauth> pip install -r .\requirements.txt        

在项目文件下新建一个chainlit_app.py文件

代码如下:

from typing import Optional, Dict
from fastapi import Request, Responseimport chainlit as cl@cl.on_chat_start
async def on_chat_start():chat_profile = cl.user_session.get("chat_profile")print(chat_profile)pass@cl.oauth_callback
def oauth_callback(provider_id: str,token: str,raw_user_data: Dict[str, str],default_user: cl.User,
) -> Optional[cl.User]:return None@cl.on_logout
def login_out(provider_id: str,token: str,raw_user_data: Dict[str, str],default_user: cl.User,
) -> Optional[cl.User]:return None@cl.password_auth_callback
def auth_callback(username: str, password: str):# Fetch the user matching username from your database# and compare the hashed password with the value stored in the databaseif (username, password) == ("admin", "admin"):return cl.User(identifier="admin", metadata={"role": "admin", "provider": "credentials"})else:return None@cl.on_logout
def main(request: Request, response: Response):response.delete_cookie("access_token")
  • 代码中去掉@cl.password_auth_callback注解 ,可以实现只有cas授权登录的方式

在项目文件下新建一个main.py文件

代码如下:

import os
import xml.etree.ElementTree as ETimport chainlit as cl
import httpx
from chainlit.auth import create_jwt
from chainlit.logger import logger
from chainlit.utils import mount_chainlit
from fastapi import FastAPI, Request, status, APIRouter
from fastapi.responses import RedirectResponseapp = FastAPI()
router = APIRouter()# 配置信息
CAS_LOGIN_URL = os.environ.get("CAS_LOGIN_URL")
CAS_VALIDATE_URL = os.environ.get("CAS_VALIDATE_URL")
SERVICE_URL = os.environ.get("SERVICE_URL")async def parse_cas_response(xml_str):"""解析CAS认证返回的XML响应返回包含用户信息和属性的字典"""namespaces = {'cas': 'http://www.yale.edu/tp/cas'}try:root = ET.fromstring(xml_str)except ET.ParseError as e:raise ValueError(f"XML解析失败: {str(e)}")# 查找认证成功节点auth_success = root.find('cas:authenticationSuccess', namespaces)if not auth_success:raise ValueError("CAS响应不包含认证成功信息")# 解析用户信息user_element = auth_success.find('cas:user', namespaces)if user_element is None:raise ValueError("缺少必要的用户字段")# 解析属性字段attributes = auth_success.find('cas:attributes', namespaces)if attributes:user_attribute = attributes.find('cas:userName', namespaces)return user_attribute.text.strip()return Noneasync def verify_ticket(ticket):if ticket is None:return False# 验证CAS Ticketasync with httpx.AsyncClient() as client:response = await client.get(CAS_VALIDATE_URL,params={"service": SERVICE_URL, "ticket": ticket})if response.status_code == 200:userName = await parse_cas_response(response.content)# 成功验证,可以在这里处理登录成功的逻辑return True, userNameelse:# 验证失败logger.error("Ticket verification failed")logger.error(response.content)return False, None@app.get("/sso/login")
async def cas_login(request: Request):cookies = request.cookiesaccess_token = cookies.get('access_token')logger.info('SERVICE_URL: %s', SERVICE_URL)logger.info('access_token %s', access_token)return RedirectResponse(url=f"{CAS_LOGIN_URL}?service={SERVICE_URL}")@app.get("/callback")
async def cas_callback(ticket: str = None):isOk, userName = await verify_ticket(ticket)if isOk:# 创建一个RedirectResponse实例redirect_response = RedirectResponse(url="/")access_token = create_jwt(cl.User(identifier=userName))# 使用set_cookie方法写入access_token到客户端的cookie中redirect_response.set_cookie(key="access_token", value=access_token)  # 注意:这里应该是一个有效的token而非硬编码值return redirect_responseelse:return RedirectResponse(url="/login", status_code=status.HTTP_302_FOUND)mount_chainlit(app=app, target="chainlit_app.py", path="/")

在项目文件下新建一个.env环境变量文件

配置如下:

CHAINLIT_AUTH_SECRET="Wk92J%obBJneySV6x@HQo6W1by7/t,Bl42CJGm%12TIOzVkK1NIby?Phvrn25.qB"OAUTH_KEYCLOAK_CLIENT_ID="KEYCLOAK"
OAUTH_KEYCLOAK_CLIENT_SECRET="KEYCLOAK"
OAUTH_KEYCLOAK_REALM="KEYCLOAK"
OAUTH_KEYCLOAK_BASE_URL="KEYCLOAK"
OAUTH_KEYCLOAK_NAME="用户统一登陆"CAS_LOGIN_URL = "http://www.unityserver.cn/login"
CAS_VALIDATE_URL = "http://www.unityserver.cn/serviceValidate"
SERVICE_URL = "http://127.0.0.1:3000/callback"
  • CAS_LOGIN_URL 用户统一登录地址
  • CAS_VALIDATE_URL 用户CAS验证地址
  • SERVICE_URL 服务回调地址
  • OAUTH_KEYCLOAK_NAME 复用了chainlit自带的KEYCLOAK 用来自定义显示名称

修改chainlit前端源码

  • 下载chainlit 源码,在编辑器里打开
    在这里插入图片描述
  • 依次点击 frontend>src>pages>Login.tsx
    在这里插入图片描述
  • 修改代码
# 修改前代码onOAuthSignIn={async (provider: string) => {window.location.href = apiClient.getOAuthEndpoint(provider);}}
# 修改后代码              
onOAuthSignIn={async (provider: string) => {window.location.href = apiClient.getSsoEndpoint(provider);}}# 新增方法getSsoEndpoint(provider: string) {console.log(provider)return this.buildEndpoint(`/sso/login`);}
  • 打包编译
    执行以下命令,进行前端编译
PS D:\PycharmProjects\chainlit-2.2.1> npm run build
  • 编译后,在frontend文件夹下找到dist文件夹,拷贝到chaint_sso项目的public文件夹下,没有就新建。
    在这里插入图片描述
    在这里插入图片描述

  • chaint_sso项目下找到.chainlit文件夹下的config.toml文件修改配置,项目首次启动会生成这些文件,修改配置

custom_build = "./public/dist"

启动运行

执行一下命令运行

uvicorn main:app --host 0.0.0.0 --port 3000
  • 可以自定义启动端口

效果展示

在这里插入图片描述
从git上获取的用户名和头像
在这里插入图片描述

http://www.whsansanxincailiao.cn/news/31963530.html

相关文章:

  • 整个网站的关键词/站长工具seo综合查询引流
  • 网站建设和技术服务合同范本/即刻搜索
  • 电子商务网站建设与规划教案/企业关键词优化推荐
  • 案例学习网站建设方案/抖音seo优化公司
  • 校园网站建设目标/网上有免费的网站吗
  • 官方网站建设的目标/北京百度推广优化排名
  • 360全景网站建设/最新军事动态
  • 政府网站管理方案/网站推广渠道
  • 网站开发合同范本大全/百度站长工具平台登录
  • 合肥网站优化费用/天津网站建设开发
  • js特效网站欣赏/徐州seo排名公司
  • 动态网站没有数据库怎么做/磁力搜索器kitty
  • 怎么接单做网站/任何小说都能搜到的软件
  • 建设部门户网站条例免费下载/2345网址导航主页
  • 网站建设需求分析调研/成都sem优化
  • 商城网站建设源码/平台交易网
  • 网站开发是网站后台开发吗/上海seo搜索优化
  • 网站源码酒类/广东做seo的公司
  • 如何修改asp网站栏目/培训心得体会200字
  • 企业宣传网站源码/网站的优化seo
  • 大学生免费服务器/代做seo关键词排名
  • 织梦网站404怎么做/怎么优化一个网站
  • 武汉光谷未来学校/seo网站快速整站优化技术
  • 网站备案 取消/营销渠道名词解释
  • 网站建设的威胁/石家庄seo优化
  • 莱特币做空网站/武汉网站排名提升
  • 云服务器建设网站/林哥seo
  • 百度做的网站靠谱吗/优化seo教程
  • 小米网站制作/怎么优化网站
  • 网站菜单导航怎么做的/2024年将爆发新瘟疫