Browse Source

feat: _User exists id first when sync session

ryanemax 7 months ago
parent
commit
11e0263371

+ 1 - 1
docker-front

@@ -1 +1 @@
-Subproject commit 26c5ebe24de77ec206676de60baa50c6f351f2fc
+Subproject commit 4ce99679dd15b479ee2c74abe019e8e3474bc558

+ 41 - 7
server/cloud/authing/func-authing-session-sync.js

@@ -1,14 +1,15 @@
 const { AuthenticationClient } = require('authing-js-sdk')
 import { pgClient } from '../../db/pg-instance'
+// const { pgClient } = require('../../db/pg-instance')
 
 export function defineAuthingLogin(){
     Parse.Cloud.define("authingLogin", async (request) => {
         let token = request.params.token;
         if(token) {
-            let result = await syncSessionWithIdToken(token)
-            return result
+            let result = await syncSessionWithIdToken(token);
+            return result;
         }
-        return null
+        return null;
     },{
         fields : {
             token:{
@@ -39,8 +40,10 @@ async function syncSessionWithIdToken(token){
     // console.log(user)
 
     // 生成Parse库所需_Session记录 objectId唯一
-    let sessionObjectId = generateObjectId(user?.id+user?.token)
-    let username = user?.phone || user?.username || user?.email
+    let sessionObjectId = generateObjectId(user?.id+user?.token);
+    let username = user?.username || user?.phone || user?.email
+    let ParseExistUser = await getParseUserByAuthingUser(user);
+    let userId = ParseExistUser?.objectId || user?.id
     let syncSessionSQL = `
     INSERT INTO "_User" (
         "objectId", "username","mobile","phone", "createdAt", "updatedAt",
@@ -74,7 +77,7 @@ async function syncSessionWithIdToken(token){
     `
     let params = [
         // 1-4
-        sessionObjectId,user?.id,user?.token,user?.tokenExpiredAt,
+        sessionObjectId,userId,user?.token,user?.tokenExpiredAt,
         // 5-8
         new Date(),new Date(),username,user?.phone,
         // 9-12
@@ -83,7 +86,7 @@ async function syncSessionWithIdToken(token){
     if(user?.id&&user?.token){
         try {
             // 查询:数据库版本信息
-            const data = await pgClient().any(syncSessionSQL,params);
+            let data = await pgClient().any(syncSessionSQL,params);
             // console.log(data)
             return {
                 sid:sessionObjectId,
@@ -98,6 +101,37 @@ async function syncSessionWithIdToken(token){
 }
 module.exports.syncSessionWithIdToken = syncSessionWithIdToken
 
+
+async function getParseUserByAuthingUser(user){
+    let sql = `
+    SELECT * FROM "_User" WHERE
+    "objectId"=$1 OR 
+    "objectId"=$2 OR
+    "username"=$3 OR 
+    ("mobile" IS NOT NULL AND "mobile" = $4) OR 
+    ("phone" IS NOT NULL AND "phone"  = $4) OR 
+    ("mobile" IS NOT NULL AND "mobile" = $5) OR 
+    ("phone"  IS NOT NULL AND "phone"  = $5) OR 
+    ("email" IS NOT NULL AND "email" = $6)
+    `
+    let params = [
+        user?.id,
+        user?.externalId,
+        user?.username,
+        uesr?.phone,
+        uesr?.mobile,
+    ]
+    let data = [] 
+    try{
+        data = await pgClient().any(sql,params);
+        if(data?.length){
+            return data[0]
+        }
+    }catch(err){}
+    return null
+
+}
+
 const crypto = require('crypto');
 function generateObjectId(inputString) {
     const hash = crypto.createHash('sha256').update(inputString).digest('hex');

+ 8 - 2
server/cloud/authing/test/test-authing-session-sync.js

@@ -1,11 +1,17 @@
+global.config = {}
+global.config['LOCAL'] = true
+
 const { syncSessionWithIdToken } = require("../func-authing-session-sync");
 
+
 console.log("Function test: syncSessionWithIdToken")
-syncSessionWithIdToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0wMVQxNTowNzozNi4xMDdaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOnRydWUsInBob25lX251bWJlciI6IjE4NjkxNzcwMzQzIiwibG9jYWxlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJnZW5kZXIiOiJVIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJlbWFpbCI6bnVsbCwid2Vic2l0ZSI6bnVsbCwicGljdHVyZSI6Imh0dHBzOi8vZmlsZXMuYXV0aGluZy5jby9hdXRoaW5nLWNvbnNvbGUvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcm9maWxlIjpudWxsLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsIm5pY2tuYW1lIjpudWxsLCJtaWRkbGVfbmFtZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdpdmVuX25hbWUiOm51bGwsIm5hbWUiOm51bGwsInN1YiI6IjY2ODJiZmU4MzcxNWIzYmIwNmM4ZGNiMiIsImV4dGVybmFsX2lkIjpudWxsLCJ1bmlvbmlkIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwic2Vjb25kYXJ5VXNlcklkcyI6bnVsbCwiZGF0YSI6eyJ0eXBlIjoidXNlciIsInVzZXJQb29sSWQiOiI2NjcyNTQwZDg3NTZhNTAzYzZmNmYwM2UiLCJhcHBJZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImlkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwidXNlcklkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwiX2lkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwicGhvbmUiOiIxODY5MTc3MDM0MyIsImVtYWlsIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwidW5pb25pZCI6bnVsbCwib3BlbmlkIjpudWxsLCJjbGllbnRJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSJ9LCJ1c2VycG9vbF9pZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImF1ZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImV4cCI6MTcyMTA1NjIwMywiaWF0IjoxNzE5ODQ2NjAzLCJpc3MiOiJodHRwczovL3RleHRib29rLnUyLWRldi5oZXAuY29tLmNuL29pZGMifQ.3agfjN19HR5oQCybrmJy29YK1W9MM6KeqKqlHMHZlTA")
+// syncSessionWithIdToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0wMVQxNTowNzozNi4xMDdaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOnRydWUsInBob25lX251bWJlciI6IjE4NjkxNzcwMzQzIiwibG9jYWxlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJnZW5kZXIiOiJVIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJlbWFpbCI6bnVsbCwid2Vic2l0ZSI6bnVsbCwicGljdHVyZSI6Imh0dHBzOi8vZmlsZXMuYXV0aGluZy5jby9hdXRoaW5nLWNvbnNvbGUvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcm9maWxlIjpudWxsLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsIm5pY2tuYW1lIjpudWxsLCJtaWRkbGVfbmFtZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdpdmVuX25hbWUiOm51bGwsIm5hbWUiOm51bGwsInN1YiI6IjY2ODJiZmU4MzcxNWIzYmIwNmM4ZGNiMiIsImV4dGVybmFsX2lkIjpudWxsLCJ1bmlvbmlkIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwic2Vjb25kYXJ5VXNlcklkcyI6bnVsbCwiZGF0YSI6eyJ0eXBlIjoidXNlciIsInVzZXJQb29sSWQiOiI2NjcyNTQwZDg3NTZhNTAzYzZmNmYwM2UiLCJhcHBJZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImlkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwidXNlcklkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwiX2lkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwicGhvbmUiOiIxODY5MTc3MDM0MyIsImVtYWlsIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwidW5pb25pZCI6bnVsbCwib3BlbmlkIjpudWxsLCJjbGllbnRJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSJ9LCJ1c2VycG9vbF9pZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImF1ZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImV4cCI6MTcyMTA1NjIwMywiaWF0IjoxNzE5ODQ2NjAzLCJpc3MiOiJodHRwczovL3RleHRib29rLnUyLWRldi5oZXAuY29tLmNuL29pZGMifQ.3agfjN19HR5oQCybrmJy29YK1W9MM6KeqKqlHMHZlTA")
+syncSessionWithIdToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0xN1QxMToyNDoxNS45NTJaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOmZhbHNlLCJwaG9uZV9udW1iZXIiOm51bGwsImxvY2FsZSI6bnVsbCwiem9uZWluZm8iOm51bGwsImJpcnRoZGF0ZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsIndlYnNpdGUiOm51bGwsInBpY3R1cmUiOiJodHRwczovL2ZpbGVzLmF1dGhpbmcuY28vYXV0aGluZy1jb25zb2xlL2RlZmF1bHQtdXNlci1hdmF0YXIucG5nIiwicHJvZmlsZSI6bnVsbCwicHJlZmVycmVkX3VzZXJuYW1lIjpudWxsLCJuaWNrbmFtZSI6bnVsbCwibWlkZGxlX25hbWUiOm51bGwsImZhbWlseV9uYW1lIjpudWxsLCJnaXZlbl9uYW1lIjpudWxsLCJuYW1lIjoi5rWL6K-V5pWZ5biIIiwic3ViIjoiNjY5NzgzNjJjYmJkZjhmZTVmNGNiYzIwIiwiZXh0ZXJuYWxfaWQiOm51bGwsInVuaW9uaWQiOm51bGwsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJzZWNvbmRhcnlVc2VySWRzIjpudWxsLCJkYXRhIjp7InR5cGUiOiJ1c2VyIiwidXNlclBvb2xJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImFwcElkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJ1c2VySWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJfaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJwaG9uZSI6bnVsbCwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJ1bmlvbmlkIjpudWxsLCJvcGVuaWQiOm51bGwsImNsaWVudElkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIn0sInVzZXJwb29sX2lkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIiwiYXVkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiZXhwIjoxNzIyNDM5NDA2LCJpYXQiOjE3MjEyMjk4MDYsImlzcyI6Imh0dHBzOi8vdGV4dGJvb2sudTItZGV2LmhlcC5jb20uY24vb2lkYyJ9.jARbG7q--nb_iFYvPXfvtj1csPClGlA1XkOD33FWhYY")
 
 /**
  * Cloud Code test
- curl -X POST -H "Content-Type: application/json" -H 'X-Parse-Application-Id: edu-textbook' -d '{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0wM1QwMjoxMTo1Ny44NDJaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOnRydWUsInBob25lX251bWJlciI6IjE4NjkxNzcwMzQzIiwibG9jYWxlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJnZW5kZXIiOiJVIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJlbWFpbCI6bnVsbCwid2Vic2l0ZSI6bnVsbCwicGljdHVyZSI6Imh0dHBzOi8vZmlsZXMuYXV0aGluZy5jby9hdXRoaW5nLWNvbnNvbGUvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcm9maWxlIjpudWxsLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsIm5pY2tuYW1lIjpudWxsLCJtaWRkbGVfbmFtZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdpdmVuX25hbWUiOm51bGwsIm5hbWUiOm51bGwsInN1YiI6IjY2ODJiZmU4MzcxNWIzYmIwNmM4ZGNiMiIsImV4dGVybmFsX2lkIjpudWxsLCJ1bmlvbmlkIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwic2Vjb25kYXJ5VXNlcklkcyI6bnVsbCwiZGF0YSI6eyJ0eXBlIjoidXNlciIsInVzZXJQb29sSWQiOiI2NjcyNTQwZDg3NTZhNTAzYzZmNmYwM2UiLCJhcHBJZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImlkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwidXNlcklkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwiX2lkIjoiNjY4MmJmZTgzNzE1YjNiYjA2YzhkY2IyIiwicGhvbmUiOiIxODY5MTc3MDM0MyIsImVtYWlsIjpudWxsLCJ1c2VybmFtZSI6bnVsbCwidW5pb25pZCI6bnVsbCwib3BlbmlkIjpudWxsLCJjbGllbnRJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSJ9LCJ1c2VycG9vbF9pZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImF1ZCI6IjY2ODJhYjk2YjdiZDVkYjU5ZDY3ODVhMCIsImV4cCI6MTcyMTE4MzI0NCwiaWF0IjoxNzE5OTczNjQ0LCJpc3MiOiJodHRwczovL3RleHRib29rLnUyLWRldi5oZXAuY29tLmNuL29pZGMifQ.AH-rjp1RYBZy5VrOeZPLoX2vOjtfIy7dPKS5R7WorNk" }' http://8.140.98.43/parse/functions/authingLogin
+ curl -X POST -H "Content-Type: application/json" -H 'X-Parse-Application-Id: edu-textbook' -d '{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0xN1QxMToyNDoxNS45NTJaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOmZhbHNlLCJwaG9uZV9udW1iZXIiOm51bGwsImxvY2FsZSI6bnVsbCwiem9uZWluZm8iOm51bGwsImJpcnRoZGF0ZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsIndlYnNpdGUiOm51bGwsInBpY3R1cmUiOiJodHRwczovL2ZpbGVzLmF1dGhpbmcuY28vYXV0aGluZy1jb25zb2xlL2RlZmF1bHQtdXNlci1hdmF0YXIucG5nIiwicHJvZmlsZSI6bnVsbCwicHJlZmVycmVkX3VzZXJuYW1lIjpudWxsLCJuaWNrbmFtZSI6bnVsbCwibWlkZGxlX25hbWUiOm51bGwsImZhbWlseV9uYW1lIjpudWxsLCJnaXZlbl9uYW1lIjpudWxsLCJuYW1lIjoi5rWL6K-V5pWZ5biIIiwic3ViIjoiNjY5NzgzNjJjYmJkZjhmZTVmNGNiYzIwIiwiZXh0ZXJuYWxfaWQiOm51bGwsInVuaW9uaWQiOm51bGwsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJzZWNvbmRhcnlVc2VySWRzIjpudWxsLCJkYXRhIjp7InR5cGUiOiJ1c2VyIiwidXNlclBvb2xJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImFwcElkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJ1c2VySWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJfaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJwaG9uZSI6bnVsbCwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJ1bmlvbmlkIjpudWxsLCJvcGVuaWQiOm51bGwsImNsaWVudElkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIn0sInVzZXJwb29sX2lkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIiwiYXVkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiZXhwIjoxNzIyNDM5NDA2LCJpYXQiOjE3MjEyMjk4MDYsImlzcyI6Imh0dHBzOi8vdGV4dGJvb2sudTItZGV2LmhlcC5jb20uY24vb2lkYyJ9.jARbG7q--nb_iFYvPXfvtj1csPClGlA1XkOD33FWhYY" }' http://8.140.98.43/parse/functions/authingLogin
+ curl -X POST -H "Content-Type: application/json" -H 'X-Parse-Application-Id: edu-textbook' -d '{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGRhdGVkX2F0IjoiMjAyNC0wNy0xN1QxMToyNDoxNS45NTJaIiwiYWRkcmVzcyI6eyJjb3VudHJ5IjpudWxsLCJwb3N0YWxfY29kZSI6bnVsbCwicmVnaW9uIjpudWxsLCJmb3JtYXR0ZWQiOm51bGx9LCJwaG9uZV9udW1iZXJfdmVyaWZpZWQiOmZhbHNlLCJwaG9uZV9udW1iZXIiOm51bGwsImxvY2FsZSI6bnVsbCwiem9uZWluZm8iOm51bGwsImJpcnRoZGF0ZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsIndlYnNpdGUiOm51bGwsInBpY3R1cmUiOiJodHRwczovL2ZpbGVzLmF1dGhpbmcuY28vYXV0aGluZy1jb25zb2xlL2RlZmF1bHQtdXNlci1hdmF0YXIucG5nIiwicHJvZmlsZSI6bnVsbCwicHJlZmVycmVkX3VzZXJuYW1lIjpudWxsLCJuaWNrbmFtZSI6bnVsbCwibWlkZGxlX25hbWUiOm51bGwsImZhbWlseV9uYW1lIjpudWxsLCJnaXZlbl9uYW1lIjpudWxsLCJuYW1lIjoi5rWL6K-V5pWZ5biIIiwic3ViIjoiNjY5NzgzNjJjYmJkZjhmZTVmNGNiYzIwIiwiZXh0ZXJuYWxfaWQiOm51bGwsInVuaW9uaWQiOm51bGwsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJzZWNvbmRhcnlVc2VySWRzIjpudWxsLCJkYXRhIjp7InR5cGUiOiJ1c2VyIiwidXNlclBvb2xJZCI6IjY2NzI1NDBkODc1NmE1MDNjNmY2ZjAzZSIsImFwcElkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJ1c2VySWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJfaWQiOiI2Njk3ODM2MmNiYmRmOGZlNWY0Y2JjMjAiLCJwaG9uZSI6bnVsbCwiZW1haWwiOiIxMjNAaGVwLmNvbS5jbiIsInVzZXJuYW1lIjoiMTIzQGhlcC5jb20uY24iLCJ1bmlvbmlkIjpudWxsLCJvcGVuaWQiOm51bGwsImNsaWVudElkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIn0sInVzZXJwb29sX2lkIjoiNjY3MjU0MGQ4NzU2YTUwM2M2ZjZmMDNlIiwiYXVkIjoiNjY4MmFiOTZiN2JkNWRiNTlkNjc4NWEwIiwiZXhwIjoxNzIyNDM5NDA2LCJpYXQiOjE3MjEyMjk4MDYsImlzcyI6Imh0dHBzOi8vdGV4dGJvb2sudTItZGV2LmhlcC5jb20uY24vb2lkYyJ9.jARbG7q--nb_iFYvPXfvtj1csPClGlA1XkOD33FWhYY" }' http://127.0.0.1:61337/parse/functions/authingLogin
  */
 
 

+ 3 - 0
server/db/schemas/_User.js

@@ -14,6 +14,9 @@ export const _User = {
         "phone": {
             "type": "String"
         },
+        "lastIP":{
+            "type":"String"
+        },
         "lastLogin": {
             "type": "Date"
         },