1d2ca4d7-cb7b-80df-907f-e6972cb0a5注意:wiz_kb_user_role查看团队任务 尝试添加 权限100是作者 1000是读者 0是管理员
[!tip] 💡 批量转移用户需要导出
wiz_user,wiz_kb这两个表才能实现登录
进阶查询语句 进阶 为知笔记忘记密码 为知笔记数据库关系 笔记同步团队人员 查询笔记文章 查询已加入团队的账户【继续优化】
SELECT
wiz_kb.KB_NAME,
wiz_user.DISPLAYNAME,
wiz_user.EMAIL
FROM
wiz_kb_user_role
JOIN wiz_kb ON wiz_kb_user_role.KB_GUID = wiz_kb.KB_GUID
JOIN wiz_user ON wiz_kb_user_role.USER_GUID = wiz_user.USER_GUID;
SELECT
-- 将 BINARY 类型的 KB_GUID 转换为格式化的字符串,带有 '-' 符号
CONCAT(
SUBSTRING(HEX(wiz_tag.KB_GUID), 1, 8), '-', -- 取前8个字符并加上第一个 '-'
SUBSTRING(HEX(wiz_tag.KB_GUID), 9, 4), '-', -- 取接下来的4个字符并加上第二个 '-'
SUBSTRING(HEX(wiz_tag.KB_GUID), 13, 4), '-', -- 取接下来的4个字符并加上第三个 '-'
SUBSTRING(HEX(wiz_tag.KB_GUID), 17, 4), '-', -- 取接下来的4个字符并加上第四个 '-'
SUBSTRING(HEX(wiz_tag.KB_GUID), 21, 12) -- 取最后的12个字符
) AS KB_GUID_Formated, -- 将格式化后的字符串命名为 KB_GUID_Formated
wk.KB_NAME, -- 选择 wizasent.wiz_kb 表中的 KB_NAME 字段
wiz_tag.TAG_NAME -- 选择 wiz_tag 表中的 TAG_NAME 字段
FROM wiz_tag
-- 从 wiz_tag 表中开始查询
LEFT JOIN wizasent.wiz_kb wk
-- 使用 LEFT JOIN 连接 wizasent.wiz_kb 表,别名为 wk
ON LOWER(CONCAT(
SUBSTRING(HEX(wiz_tag.KB_GUID), 1, 8), '-', -- 格式化 wiz_tag.KB_GUID
SUBSTRING(HEX(wiz_tag.KB_GUID), 9, 4), '-',
SUBSTRING(HEX(wiz_tag.KB_GUID), 13, 4), '-',
SUBSTRING(HEX(wiz_tag.KB_GUID), 17, 4), '-',
SUBSTRING(HEX(wiz_tag.KB_GUID), 21, 12)
)) = LOWER(wk.KB_GUID); -- 将格式化后的 KB_GUID 转换为小写,并与 wizasent.wiz_kb.KB_GUID 的小写值进行比较
单点系统
const express = require('express');
const axios = require('axios').default;
const app = express();
// ===== 配置区 =====
const API_URL = 'http://192.168.1.100'; // 为知笔记服务器地址
const OAUTH_SETTINGS = {
clientId: 'xxx', // 你在为知后台拿到的 clientId
clientSecret: 'xxx', // 你在为知后台拿到的 clientSecret
};
// ===== 第一步:获取 accessToken =====
async function getAccessToken() {
const { clientId, clientSecret } = OAUTH_SETTINGS;
const url = `${API_URL}/as/oauth/token?clientId=${clientId}&clientSecret=${clientSecret}`;
const response = await axios.get(url);
const { data } = response;
if (!data || data.returnCode !== 200) {
throw new Error('获取 accessToken 失败');
}
return data.result.accessToken;
}
// ===== 第二步:获取一次性登录链接 =====
async function getLoginUrl(userEmail) {
const accessToken = await getAccessToken();
const url = `${API_URL}/as/oauth/service/login_url?accessToken=${accessToken}&userId=${encodeURIComponent(userEmail)}`;
const response = await axios.get(url);
const { data } = response;
if (!data || data.returnCode !== 200) {
throw new Error('获取一次性登录链接失败');
}
return data.result;
}
// ===== ERP 按钮点击接口 =====
app.get('/wiz-login', async (req, res) => {
try {
// 假设 ERP 已经有当前登录用户的邮箱
// 生产环境中,请从登录态取真实邮箱,而不是写死
const currentUserEmail = 'alice@example.com';
const loginUrl = await getLoginUrl(currentUserEmail);
// 直接跳转到为知笔记
res.redirect(loginUrl);
} catch (err) {
console.error(err);
res.status(500).send('单点登录失败,请联系管理员');
}
});
app.listen(3000, () => {
console.log('ERP → 为知 SSO 服务已启动,访问 http://localhost:3000/wiz-login 体验');
});