func-authing-session-sync.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const { AuthenticationClient } = require('authing-js-sdk')
  2. const { pgClient } = require('../db/pg-instance')
  3. /**
  4. * 同步用户登录信息
  5. * @desc
  6. * https://docs.authing.cn/v2/reference/sdk-for-node/authentication/AuthenticationClient.html#获取当前登录的用户信息
  7. * @param {*} token
  8. * @returns
  9. */
  10. async function syncSessionWithIdToken(token){
  11. // 通过用户的 id_token 初始化之后获取用户信息
  12. let authenticationClient = new AuthenticationClient({
  13. appId: '6682ab96b7bd5db59d6785a0',
  14. appHost: 'https://textbook.u2-dev.hep.com.cn', // 应用的认证地址
  15. token: token
  16. })
  17. let user = await authenticationClient.getCurrentUser()
  18. // console.log(user)
  19. // 生成Parse库所需_Session记录 objectId唯一
  20. let sessionObjectId = generateObjectId(user?.id+user?.token)
  21. let username = user?.phone || user?.username || user?.email
  22. let syncSessionSQL = `
  23. INSERT INTO "_User" ("objectId", "username","mobile", "createdAt", "updatedAt")
  24. VALUES
  25. ($2,$7,$8,$5,$6)
  26. ON conflict("objectId") DO UPDATE
  27. SET
  28. "username" = excluded."username",
  29. "updatedAt"=excluded."updatedAt";
  30. INSERT INTO "_Session" ("objectId", "user", "sessionToken","expiresAt", "createdAt", "updatedAt")
  31. VALUES
  32. ($1, $2,$3,$4,$5,$6)
  33. ON conflict("objectId") DO UPDATE
  34. SET
  35. "user" = excluded."user",
  36. "sessionToken" = excluded."sessionToken",
  37. "expiresAt"=excluded."expiresAt",
  38. "updatedAt"=excluded."updatedAt";
  39. `
  40. let params = [sessionObjectId,user?.id,user?.token,user?.expiresAt,new Date(),new Date(),username,user?.phone]
  41. if(user?.id&&user?.token){
  42. try {
  43. // 查询:数据库版本信息
  44. const data = await pgClient.any(syncSessionSQL,params);
  45. // console.log(data)
  46. return {
  47. sid:sessionObjectId,
  48. uid:user?.id,
  49. sessionToken:user?.token
  50. };
  51. } catch (error) {
  52. console.error('Error executing query:', error);
  53. return null;
  54. }
  55. }
  56. }
  57. module.exports.syncSessionWithIdToken = syncSessionWithIdToken
  58. const crypto = require('crypto');
  59. function generateObjectId(inputString) {
  60. const hash = crypto.createHash('sha256').update(inputString).digest('hex');
  61. const objectId = hash;
  62. return objectId;
  63. }