1.前言
dify工作室支持在画布上直接编辑业务流程,通过调用开源大模型可以实现特定场景的业务,而且可以迅速更新发布。因此,某些项目要求在产品里面能够直接编辑 dify业务流程,使得现场开发人员能够迅速响应客户需求。另外,方便对 dify进行运维,比如 更新开源大模型认证信息。
2.实现思路分析
把 dify页面直接嵌入到产品中
界面样式不统一,需要改造登录模块,工作量可以接受,且易升级。
根据项目实际情况,这里选择第二种方案,把 dify页面嵌入到产品中。同时,通过观察 dify登录流程和分析相关请求,发现只要访问dify项目的时候url携带对应的 token即可实现 dify的免登陆,如下:
useEffect(() => {
(async () => {
try {
const isFinished = await isSetupFinished()
if (!isFinished) {
router.replace('/install')
return
}
if (!((consoleToken && refreshToken) || (consoleTokenFromLocalStorage && refreshTokenFromLocalStorage))) {
router.replace('/signin')
return
}
if (searchParams.has('access_token') || searchParams.has('refresh_token')) {
consoleToken && localStorage.setItem('console_token', consoleToken)
refreshToken && localStorage.setItem('refresh_token', refreshToken)
router.replace(pathname)
}
setInit(true)
}
catch (error) {
router.replace('/signin')
}
})()
}, [isSetupFinished, router, pathname, searchParams, consoleToken, refreshToken, consoleTokenFromLocalStorage, refreshTokenFromLocalStorage])
- 执行顺序:
- 检查设置状态:若未完成设置(
!isFinished),则跳转到安装页面(/install)。 - 验证令牌:
- 优先检查 URL 参数中的
access_token和refresh_token。 - 若 URL 中没有,则检查
localStorage中缓存的令牌。 - 若都没有有效令牌,则跳转到登录页面(
/signin)。
- 优先检查 URL 参数中的
- 保存令牌到本地存储:
- 若 URL 中存在令牌,则将其存入
localStorage,并清除 URL 中的参数(通过router.replace(pathname))。
- 若 URL 中存在令牌,则将其存入
- 完成初始化:所有检查通过后,将
init设为true,允许渲染子组件
- 检查设置状态:若未完成设置(
这样我们只要在url上携带access_token和 refresh_token就可以登录了
http://localhost:3000/app?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiZjMwMTBmZTgtYzA2ZC00ZjQ1LTliNzktM2VmMTA0ZGE5OGZmIiwiZXhwIjoxNzUwNzU3MzcxLCJpc3MiOiJTRUxGX0hPU1RFRCIsInN1YiI6IkNvbnNvbGUgQVBJIFBhc3Nwb3J0In0.BYzulUODqw3gNRqjC42PXFf6IDV_Vcz7pO3BQHeXOqw&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiZjMwMTBmZTgtYzA2ZC00ZjQ1LTliNzktM2VmMTA0ZGE5OGZmIiwiZXhwIjoxNzUwNzU3MzcxLCJpc3MiOiJTRUxGX0hPU1RFRCIsInN1YiI6IkNvbnNvbGUgQVBJIFBhc3Nwb3J0In0.BYzulUODqw3gNRqjC42PXFf6IDV_Vcz7pO3BQHeXOqw
token获取方式由后台 请求dify登录接口获取到回传给前端
def login_dify():
login_response = post(
f"{DIFY_CONFIG['url']}/console/api/login",
json={
'email': DIFY_CONFIG['username'],
'password': DIFY_CONFIG['password'],
'language': 'zh-Hans',
'remember_me': True,
},
verify=False
)
if login_response.status_code == 200:
return {
'access_token': access_token,
'refresh_token': refresh_token
}
else:
raise APIException('登录DIFY失败, 请检查配置')
亲测可用
1万+

被折叠的 条评论
为什么被折叠?



