login.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const { preLogin, postLogin } = require('../../lib/utils/login')
  2. const { EXTERNAL_DIRECT_CONNECT_PROVIDER } = require('../../common/constants')
  3. const { ERROR } = require('../../common/error')
  4. /**
  5. * 外部用户登录
  6. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#external-login
  7. * @param {object} params
  8. * @param {string} params.uid uni-id体系用户id
  9. * @param {string} params.externalUid 业务系统的用户id
  10. * @returns {object}
  11. */
  12. module.exports = async function (params = {}) {
  13. const schema = {
  14. uid: {
  15. required: false,
  16. type: 'string'
  17. },
  18. externalUid: {
  19. required: false,
  20. type: 'string'
  21. }
  22. }
  23. this.middleware.validate(params, schema)
  24. const {
  25. uid,
  26. externalUid
  27. } = params
  28. if (!uid && !externalUid) {
  29. throw {
  30. errCode: ERROR.PARAM_REQUIRED,
  31. errMsgValue: {
  32. param: 'uid or externalUid'
  33. }
  34. }
  35. }
  36. let query
  37. if (uid) {
  38. query = {
  39. _id: uid
  40. }
  41. } else {
  42. query = {
  43. identities: {
  44. provider: EXTERNAL_DIRECT_CONNECT_PROVIDER,
  45. uid: externalUid
  46. }
  47. }
  48. }
  49. const user = await preLogin.call(this, {
  50. user: query
  51. })
  52. const result = await postLogin.call(this, {
  53. user
  54. })
  55. return {
  56. errCode: result.errCode,
  57. newToken: result.newToken,
  58. uid: result.uid
  59. }
  60. }