login-by-univerify.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const {
  2. getPhoneNumber
  3. } = require('../../lib/utils/univerify')
  4. const {
  5. preUnifiedLogin,
  6. postUnifiedLogin
  7. } = require('../../lib/utils/unified-login')
  8. const {
  9. LOG_TYPE
  10. } = require('../../common/constants')
  11. /**
  12. * App端一键登录
  13. * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#login-by-univerify
  14. * @param {Object} params
  15. * @param {String} params.access_token APP端一键登录返回的access_token
  16. * @param {String} params.openid APP端一键登录返回的openid
  17. * @param {String} params.inviteCode 邀请码
  18. * @returns
  19. */
  20. module.exports = async function (params = {}) {
  21. const schema = {
  22. access_token: 'string',
  23. openid: 'string',
  24. inviteCode: {
  25. required: false,
  26. type: 'string'
  27. }
  28. }
  29. this.middleware.validate(params, schema)
  30. const {
  31. // eslint-disable-next-line camelcase
  32. access_token,
  33. openid,
  34. inviteCode
  35. } = params
  36. let mobile
  37. try {
  38. const phoneInfo = await getPhoneNumber.call(this, {
  39. // eslint-disable-next-line camelcase
  40. access_token,
  41. openid
  42. })
  43. mobile = phoneInfo.phoneNumber
  44. } catch (error) {
  45. await this.middleware.uniIdLog({
  46. success: false,
  47. type: LOG_TYPE.LOGIN
  48. })
  49. throw error
  50. }
  51. const {
  52. user,
  53. type
  54. } = await preUnifiedLogin.call(this, {
  55. user: {
  56. mobile
  57. }
  58. })
  59. return postUnifiedLogin.call(this, {
  60. user,
  61. extraData: {
  62. mobile_confirmed: 1
  63. },
  64. type,
  65. inviteCode
  66. })
  67. }