routes.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. let Parse = global.Parse
  2. const router = require('express').Router();
  3. let bodyParser = require('body-parser')
  4. const pgp = require('pg-promise')();
  5. router.use(bodyParser.json({ limit: '10mb' }))
  6. router.use(bodyParser.urlencoded({ extended: false }))
  7. router.use("/test", async (req, res, next) => {
  8. res.json({
  9. code: 200,
  10. data: "test"
  11. })
  12. })
  13. router.post("/register", async (req, res, next) => {
  14. let company = req.body.company;
  15. let mobile = req.body.mobile;
  16. let code = req.body.code;
  17. let password = req.body.password
  18. if (!company || !mobile || !code) {
  19. goWrong(req, "参数不完整,请检查");
  20. return
  21. }
  22. // 检查用户信息
  23. let user;
  24. user = await getUserByMobile(mobile, company);
  25. if (user) {
  26. // goWrong(req, "用户已存在,请登录")
  27. let token = await setMobileSessionToken(user)
  28. res.json({
  29. code: 200,
  30. msg: '用户已存在,请登录',
  31. data: {
  32. userId: user.id,
  33. username: user.get("username"),
  34. mobile: user.get("mobile"),
  35. token: token?.get("sessionToken")
  36. }
  37. })
  38. return
  39. }
  40. try {
  41. let _User = Parse.Object.extend("_User")
  42. let User = new _User
  43. User.set("username", company + mobile)
  44. User.set("password", company + mobile)
  45. User.set("company", {
  46. __type: 'Pointer',
  47. className: 'Company',
  48. objectId: company
  49. })
  50. User.set("mobile", mobile)
  51. User.set("status", 'normal')
  52. let saveUser = await User.save({ useMasterKey: true })
  53. let token = await setMobileSessionToken(saveUser)
  54. res.json({
  55. code: 200,
  56. msg: '注册成功',
  57. data: {
  58. userId: saveUser.id,
  59. username: saveUser.get("username"),
  60. mobile: saveUser.get("mobile"),
  61. token: token?.get("sessionToken")
  62. }
  63. })
  64. } catch (error) {
  65. console.log(error)
  66. return
  67. }
  68. })
  69. function goWrong(response, msg) {
  70. response.status(500)
  71. response.json({
  72. code: 500,
  73. mess: msg
  74. })
  75. return
  76. }
  77. /* 检查用户是否存在 */
  78. function getUserByMobile(mobile, company) {
  79. let query = new global.Parse.Query("_User");
  80. query.equalTo("mobile", mobile);
  81. query.equalTo("company", company);
  82. return query.first({ useMasterKey: true });
  83. }
  84. /* 创建_Session并返回 */
  85. const db = pgp({
  86. user: 'postgres',
  87. password: 'postgres',
  88. host: 'localhost',
  89. port: 25432,
  90. database: 'postgres'
  91. });
  92. async function setMobileSessionToken(user, reset) {
  93. try {
  94. // let Session = global.Parse.Object.extend('_Session');
  95. if (user) {
  96. //获取最后一次的token,如果过期时间大于未来2小时直接返回,若不是重置
  97. let nowTime = new Date().getTime() + (1000 * 60 * 120)
  98. let query = new Parse.Query('_Session')
  99. query.equalTo('user', user.id)
  100. query.descending('expiresAt')
  101. query.greaterThan('expiresAt', new Date(nowTime))
  102. query.select('expiresAt', 'sessionToken')
  103. let reqSessionToken = await query.first({ useMasterKey: true })
  104. if (reqSessionToken?.id && reqSessionToken.get('sessionToken')) {
  105. return reqSessionToken
  106. }
  107. let username = user?.username || user?.get('username')
  108. let sessionToken = "r:" + username + (new Date().getTime() / 1000).toFixed();
  109. // 创建新Session登录系统
  110. let Session = Parse.Object.extend('_Session');
  111. let session = new Session()
  112. let r = await session.save(null, {
  113. useMasterKey: true
  114. })
  115. const objectId = r.id;
  116. let now = new Date();
  117. let expiresAt = (now.getFullYear() + 1) + '-' + (now.getMonth() + 1) + '-' + now.getDate() + ' 12:00:00'
  118. console.log(expiresAt);
  119. let sql = `INSERT INTO "_Session" ("objectId","user", "sessionToken", "expiresAt", "createdWith")
  120. VALUES
  121. ('${objectId}','${user.id}', '${sessionToken}','${expiresAt}','{"action": "login","authProvider": "appPassword"}')
  122. ON CONFLICT("objectId") DO UPDATE
  123. SET
  124. "user" = excluded."user",
  125. "sessionToken" = excluded."sessionToken",
  126. "expiresAt"=excluded."expiresAt",
  127. "createdWith"=excluded."createdWith"
  128. `
  129. const data = await db.any(sql);
  130. console.log('_Session', data)
  131. let doneObj = {
  132. get(field = 'sessionToken') {
  133. if (field = 'sessionToken') return sessionToken
  134. }
  135. }
  136. // let session = new Session();
  137. // session.set("user", {
  138. // __type: 'Pointer',
  139. // className: '_User',
  140. // objectId: user.id
  141. // });
  142. // session.set("sessionToken", sessionToken);
  143. // let now = new Date();
  144. // now.setFullYear(now.getFullYear() + 1);
  145. // let expiresAt = now;
  146. // session.set("expiresAt", expiresAt);
  147. // session.set("createdWith", {
  148. // "action": "login",
  149. // "authProvider": "appPassword"
  150. // })
  151. // session.set("restricted", false)
  152. // let doneObj = await session.save(null, {
  153. // useMasterKey: true
  154. // })
  155. // if (!doneObj) {
  156. // return false
  157. // }
  158. return doneObj
  159. }
  160. } catch (err) {
  161. console.log(err)
  162. return false
  163. }
  164. }
  165. module.exports = router;