|
@@ -1,3 +1,4 @@
|
|
|
+// https://docs.authing.co/v2/reference/sdk-for-node/management/UsersManagementClient.html
|
|
|
const { ManagementClient } = require('authing-node-sdk')
|
|
|
const managementClient = new ManagementClient({
|
|
|
accessKeyId: '6686bffb373d06911e24a969',
|
|
@@ -5,6 +6,60 @@ const managementClient = new ManagementClient({
|
|
|
host: 'https://textbook.u2-dev.hep.com.cn', // 应用的认证地址
|
|
|
})
|
|
|
|
|
|
+
|
|
|
+/**
|
|
|
+ * 用户创建前,创建用户至Authing
|
|
|
+ * @desc 仅同步注册信息及密码,资料在afterSave中同步
|
|
|
+ */
|
|
|
+export function defineUserBeforeSave(){
|
|
|
+ Parse.Cloud.beforeSave("_User", async (request) => {
|
|
|
+ let user = request.object;
|
|
|
+ // 仅首次注册/创建用户/修改密码有password属性,同步Authing账号
|
|
|
+ let password = user?.get("password");
|
|
|
+ if(password){
|
|
|
+ let mobile = user?.get("mobile");
|
|
|
+ let email = user?.get("email");
|
|
|
+ let username = user?.get("username");
|
|
|
+ let externalId = user?.id;
|
|
|
+ let authingUserExists = await findUserByMobileEmailUserName(user)
|
|
|
+ if(authingUserExists?.statusCode==404){ // 创建用户
|
|
|
+ let newuser = {
|
|
|
+ status:"Activated",
|
|
|
+ }
|
|
|
+ if(mobile){newuser.phone = mobile}
|
|
|
+ if(email){newuser.email = email}
|
|
|
+ if(username){newuser.username = username}
|
|
|
+ if(externalId){newuser.externalId = externalId}
|
|
|
+
|
|
|
+ result = await managementClient.createUser(newuser)
|
|
|
+ }
|
|
|
+ if(authingUserExists?.statusCode==200){
|
|
|
+ let existsUser = authingUserExists?.data;
|
|
|
+ try{
|
|
|
+ let updateRes = await managementClient.updateUser({
|
|
|
+ userId:existsUser?.userId,
|
|
|
+ password:password,
|
|
|
+ })
|
|
|
+ // console.log(result)
|
|
|
+ }catch(err){console.log(err)}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+/**
|
|
|
+ * 用户删除前,删除用户从Authing
|
|
|
+ */
|
|
|
+ export function defineUserBeforeDelete(){
|
|
|
+ Parse.Cloud.beforeDelete("_User", async (request) => {
|
|
|
+ let user = request.object;
|
|
|
+ // console.log(user.toJSON());
|
|
|
+ // console.log(user?.get("password"))
|
|
|
+ let authingUserExists = await findUserByMobileEmailUserName(user)
|
|
|
+ });
|
|
|
+}
|
|
|
+/**
|
|
|
+ * 用户保存后同步数据至Authing
|
|
|
+ */
|
|
|
export function defineUserAfterSave(){
|
|
|
Parse.Cloud.afterSave("_User", async (request) => {
|
|
|
// console.log("save _User",request?.object?.id)
|
|
@@ -24,6 +79,61 @@ export function defineUserAfterSave(){
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 查询用户
|
|
|
+ * @param {*} user
|
|
|
+ * @returns
|
|
|
+ * 不存在:
|
|
|
+ * {
|
|
|
+ statusCode: 404,
|
|
|
+ apiCode: 2004,
|
|
|
+ message: '用户不存在',
|
|
|
+ requestId: 'e59cb407-f2d9-4bd8-ac93-d2dbc8d6ab72'
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ statusCode: 200,
|
|
|
+ message: '',
|
|
|
+ data: {
|
|
|
+ userId: '669676e5a3a9ac870bfff2a3',
|
|
|
+ createdAt: '2024-07-16T13:34:29.789Z',
|
|
|
+ updatedAt: '2024-07-16T13:34:29.789Z',
|
|
|
+ status: 'Activated'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ */
|
|
|
+async function findUserByMobileEmailUserName(user){
|
|
|
+ let mobile = user?.get("mobile");
|
|
|
+ let email = user?.get("email");
|
|
|
+ let username = user?.get("username");
|
|
|
+ let externalId = user?.id;
|
|
|
+ let result;
|
|
|
+ if(email){
|
|
|
+ try{
|
|
|
+ result = await managementClient.getUser({userIdType:`email`,userId:email})
|
|
|
+ // console.log(email,result)
|
|
|
+ }catch(err){}
|
|
|
+ }
|
|
|
+ if(mobile&&(!result || result?.statusCode==404)){
|
|
|
+ try{
|
|
|
+ result = await managementClient.getUser({userIdType:`phone`,userId:mobile})
|
|
|
+ // console.log(mobile,result)
|
|
|
+ }catch(err){}
|
|
|
+ }
|
|
|
+ if(username&&(!result || result?.statusCode==404)){
|
|
|
+ try{
|
|
|
+ result = await managementClient.getUser({userIdType:`username`,userId:username})
|
|
|
+ // console.log("username",username,result)
|
|
|
+ }catch(err){}
|
|
|
+ }
|
|
|
+ if(externalId&&(!result || result?.statusCode==404)){
|
|
|
+ try{
|
|
|
+ result = await managementClient.getUser({userIdType:`external_id`,userId:externalId})
|
|
|
+ // console.log(externalId,result)
|
|
|
+ }catch(err){}
|
|
|
+ }
|
|
|
+ return result
|
|
|
+}
|
|
|
|
|
|
async function syncUserProfileToAuthing(user,profile){
|
|
|
if(!user?.id) return
|
|
@@ -43,6 +153,12 @@ async function syncUserProfileToAuthing(user,profile){
|
|
|
userInfo.userType = userInfo.identity
|
|
|
delete userInfo.identity
|
|
|
userInfo.userId = userInfo.objectId
|
|
|
+ let authingUserExists = await findUserByMobileEmailUserName(user)
|
|
|
+ if(authingUserExists?.statusCode==200){
|
|
|
+ let existsUser = authingUserExists?.data;
|
|
|
+ userInfo.userId = existsUser.userId
|
|
|
+
|
|
|
+ }
|
|
|
delete userInfo.objectId
|
|
|
userInfo.identifyStatus = userInfo.accountState
|
|
|
// 自定义数据全量同步
|