register.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const url = require('url')
  2. const { preRegister, postRegister } = require('../../lib/utils/register')
  3. const { EXTERNAL_DIRECT_CONNECT_PROVIDER } = require('../../common/constants')
  4. /**
  5. * 外部注册用户
  6. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#external-register
  7. * @param {object} params
  8. * @param {string} params.externalUid 业务系统的用户id
  9. * @param {string} params.nickname 昵称
  10. * @param {number} params.gender 性别
  11. * @param {string} params.avatar 头像
  12. * @returns {object}
  13. */
  14. module.exports = async function (params = {}) {
  15. const schema = {
  16. externalUid: 'string',
  17. nickname: {
  18. required: false,
  19. type: 'nickname'
  20. },
  21. gender: {
  22. required: false,
  23. type: 'number'
  24. },
  25. avatar: {
  26. required: false,
  27. type: 'string'
  28. }
  29. }
  30. this.middleware.validate(params, schema)
  31. const {
  32. externalUid,
  33. avatar,
  34. gender,
  35. nickname
  36. } = params
  37. await preRegister.call(this, {
  38. user: {
  39. identities: {
  40. provider: EXTERNAL_DIRECT_CONNECT_PROVIDER,
  41. uid: externalUid
  42. }
  43. }
  44. })
  45. const extraData = {}
  46. if (avatar) {
  47. // eslint-disable-next-line n/no-deprecated-api
  48. const avatarPath = url.parse(avatar).pathname
  49. const extName = avatarPath.indexOf('.') > -1 ? avatarPath.split('.').pop() : ''
  50. extraData.avatar_file = {
  51. name: avatarPath,
  52. extname: extName,
  53. url: avatar
  54. }
  55. }
  56. const result = await postRegister.call(this, {
  57. user: {
  58. avatar,
  59. gender,
  60. nickname,
  61. identities: [
  62. {
  63. provider: EXTERNAL_DIRECT_CONNECT_PROVIDER,
  64. userInfo: {
  65. avatar,
  66. gender,
  67. nickname
  68. },
  69. uid: externalUid
  70. }
  71. ]
  72. },
  73. extraData
  74. })
  75. return {
  76. errCode: result.errCode,
  77. newToken: result.newToken,
  78. externalUid,
  79. avatar,
  80. gender,
  81. nickname,
  82. uid: result.uid
  83. }
  84. }