为知笔记.md 4.1 KB


notion-id: 1d2ca4d7-cb7b-80df-907f-e6972cb0a5

注意:wiz_kb_user_role查看团队任务 尝试添加 权限100是作者 1000是读者 0是管理员

[!tip] 💡 批量转移用户需要导出wiz_userwiz_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 体验');
});