Authing 知识库
🛠 开发资源🥂 集成案例🔭 常见问题🖥 控制台
3.0.0
3.0.0
  • 欢迎
  • Authing 概述
  • 快速开始
    • 注册 Authing 开发者账号
    • 第一个应用
    • 基础概念
    • 实现单点登录
    • 控制台概览
    • 部署模型和价格
    • 最佳开发实践
    • 我该如何选择 Authing 的技术
  • 进阶指南
    • 理解认证和授权
      • 用户名 - 密码认证
      • 邮箱 - 密码认证
      • 手机 - 验证码认证
      • JWT Token 释义及使用
    • 验证 Token
    • 配置用户权限
    • 迁移老数据进 Authing
    • 错误代码
  • 认证
    • 接入 OAuth 2.0
      • 创建 OAuth 应用
      • 使用 OAuth 授权
    • 接入 OpenID Connect
      • 创建 OIDC 应用
      • 使用 OIDC 授权
      • 理解 OIDC 流程
      • OIDC 常见问题
    • 接入 SAML
      • 创建 SAML Identity Provider 应用
      • 创建 SAML Service Provider 应用
      • 理解 SAML 流程
      • 同时使用 Authing 作为 SP 和 IdP
      • 使用 SAML Identity Provider
        • 在阿里云访问管理中使用
        • 在腾讯云访问管理中使用
        • 在 Auth0 中使用
      • 使用 SAML Service Provider
        • 与 Auth0 SAML IdP 对接
        • 与 SSOCircle SAML IdP 对接
    • 接入 LDAP
      • 配置 LDAP 服务
      • 使用 Authing 的 LDAP 用户目录
    • 接入 Active Directory
  • 社会化登录
    • 接入 Web 端社会化登录
      • GitHub 登录
      • 微信 PC 扫码登录
      • 微信 APP 内网页登录
      • 企业微信(第三方应用)网页授权登录
      • 企业微信(第三方应用)扫码登录
      • 企业微信(企业内部)扫码登录
      • 新浪微博登录
      • 钉钉登录
      • QQ 登录
      • 配置登录授权 Scope
    • 接入移动端社会化登录
      • 微信登录
      • 支付宝登录
    • 接入小程序登录
      • 小程序登录
        • 用户登录凭证(code)最佳实践
      • APP 拉起小程序登录
    • 打通微信账号体系
  • 扫码登录
    • 小程序扫码登录
      • 接入私有化小程序
    • APP 扫码登录
      • 快速接入
      • Web 端 SDK
      • 完整接口列表
      • 自定义配置项
      • 扫码登录原理
  • 移动应用登录
    • 移动应用 SSO
      • 自动检测登录
      • 唤起 App 登录
    • 移动应用身份提供商
  • 授权
    • Authorization 基础概念
      • 什么是基于角色的管理(RBAC)
      • 什么是基于属性的管理(ABAC)
      • 什么是零信任网络
    • Authorization at Authing
    • 接入 RBAC
    • 接入 ABAC
    • 接入组织机构管理
  • 扩展能力
    • 自定义认证流程(Pipeline)
      • 创建你的第一个 Pipeline 函数
      • Pipeline 函数开发指南
      • 应用场景
      • user 对象
      • context 对象
      • 使用环境变量
      • 可用的 Node Modules
      • 如何调试
      • Node SDK
      • GraphQL API
      • 常见问题
      • 私有化部署
    • 使用 Webhook
    • 自定义用户字段
  • 开发资源
    • 开发资源
    • API(GraphQL)
    • Guard for Web
      • 自定义 Guard 的 UI 样式
    • Guard for Mobile
      • Guard for React Native
    • Guard VS 自定义 UI
    • SDK for 单点登录
    • SDK for JavaScript
      • 查询用户权限
      • 绑定社会化登录
      • 自定义用户字段
      • 管理 MFA 口令
      • 自定义请求链接
    • SDK for Node.js
      • 权限控制
      • 查询用户权限
      • 组织机构管理
      • 老版权限控制(deprecated)
      • Pipeline 函数
      • 自定义用户字段
      • 绑定社会化登录
      • 管理 MFA 口令
      • 自定义请求连接
    • SDK for React Native
    • SDK for 微信小程序
    • SDK for Java
    • SDK for Objective-C
    • SDK for Python
    • SDK for Go
    • SDK for PHP
    • 函数计算(FaaS)
  • 通信
    • 邮件
    • SMS
  • MFA
    • 配置 MFA 安全口令
      • 使用 Microsoft Authenticator 添加 MFA 令牌
    • 接入 MFA
  • 安全
    • 配置 Web 安全域
    • 配置用户池密码强度
    • 配置密码加密函数
  • 其他
    • 常见问题
    • 集成案例
      • Authing 与 AWS 集成案例
      • 函数计算与 AaaS 集成案例
      • Odoo 集成案例
      • 社会化登录集成案例
    • 社交互联数据
    • 为 Authing 贡献 SDK
      • 了解 Authing 的模块
Powered by GitBook
On this page
  • 第一步:修改用户池配置
  • 第二步:编写密码函数计算
  • 第三步:导出你的用户数据
  • 第四步:导入用户数据到 Authing

Was this helpful?

  1. 进阶指南

迁移老数据进 Authing

第一步:修改用户池配置

开始导入用户前,请进入基础配置 -> 安全设置,关闭「频繁注册限制」、「登录失败次数限制」,导入完毕后再开启。如果导入的用户邮箱已经验证过,建议开启「邮箱无需经过验证」。

第二步:编写密码函数计算

如果你的用户数据表中密码字段是明文,可以跳过此步骤;如果是密文,需要进入基础配置 -> 密码管理 -> 自定义密码加密方法开启选项并编写用于加密和验证密码的函数。

第三步:导出你的用户数据

请将你的用户数据导出为 JSON 格式,内容为一个数组,每个元素是一个对象,其中一个元素对应一条用户的信息,例如:

[
  {
    "uid": "1",
    "nickname": "zhang",
    "account_id": "zhang",
    "mail": "",
    "password": "$2b$12$nCa3WDbsc3tvM57ifzjwrOAGGuNK7EPV0R17WKcW6f13NZvX97yLe",
    "phone": "13512341234"
  },
  {
    "uid": "2",
    "nickname": "wang",
    "account_id": "wang",
    "mail": "",
    "password": "$2b$12$HGloOlfz1HzD0v/r5m1r7OCMcx6X85eC5.At3Ckxe.Jn/u/Za/yy2",
    "phone": "13712341234"
  },
  {
    "uid": "3",
    "nickname": "zhao",
    "account_id": "zhao",
    "mail": "",
    "password": "$2b$12$ia1oUZZFbEUpLvuqUsKideQq9lVkf2kq9vFaTvp7dlfeCx8UlTmDu",
    "phone": "13512341234"
  }
]

第四步:导入用户数据到 Authing

创建一个 index.js 文件。

将以下 js 脚本粘贴到 index.js:

const fs = require("fs");
const path = require("path");

const Authing = require("authing-js-sdk");
const secret = "xxxxxxxxxxxxxxxxxxx";
const clientId = "xxxxxxxxxxxxxxxxxxx";

// 如果文件较大建议分批次读入
// 请将用户信息与本文件保存在同一个目录,文件内容为用户数据的数组 JSON,一个元素为一个用户的信息对象
let users = fs.readFileSync(path.resolve('users.json'), { encoding: "utf8" });

async function main() {
  const authing = await new Authing({
    clientId,
    secret
  });
  for (let i = 0; i < users.length; i++) {
    try {
      let yourUser = users[i];
      // 在此完成字段对齐
      let registerResult = await authing.register({
        /**
         * 开启这个开关,password 字段会直接写入 Authing 数据库,Authing 不会再次加密此字段
         * 如果你的密码不是明文存储,你应该保持开启,并编写密码函数计算
         */
        keepPassword: true,
        username: yourUser.username,
        nickname: yourUser.nickname,
        password: yourUser.password,
        email: yourUser.email,
        photo: yourUser.picture,
        phone: yourUser.telephone,
        // 微信、github、qq 等社会化登录时提供的第三方 unionid
        unionid: yourUser.githubId,
        // 存储原始数据,以备使用
        oauth: JSON.stringify(yourUser),
        // 如果有微信、微博等注册方式应该也要填一下,这里对具体业务绑定性挺强的
        // registerMethod 可选值为 default:username-password social:qq social:dingtalk social:weibo oauth:github oauth:wechat oauth:wxapp
        registerMethod: user.githubId
          ? "oauth:github"
          : "default:username-password"
      });
      if (!registerResult._id) {
        throw Error("注册失败");
      }
    } catch (err) {
      console.log(err);
      // 将导入失败的用户写入文件
      fs.writeFileSync(path.resolve('users_failed.json'), JSON.stringify(yourUser) + "\n", {
        flag: "a"
      });
    }
  }
}

main();

复制完成后请对字段进行对齐,再执行

$ npm install authing-js-sdk
$ node index.js
Previous配置用户权限Next错误代码

Last updated 5 years ago

Was this helpful?

如果你没有 NodeJS 环境,需要先。

代码可在 Github 查看:

遇到问题?,Feel free to talk.

安装 NodeJS
Star
联系我们