index.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import jwt from "jsonwebtoken";
  2. import {
  3. User
  4. } from "../../../models/User";
  5. import {
  6. LoginResult,
  7. LoginInput
  8. } from "./types";
  9. import redis from "../../../config/redis";
  10. const login = async (input: LoginInput): Promise<LoginResult> => {
  11. const {
  12. password,
  13. mail
  14. } = input;
  15. const user = await User.findOne({
  16. mail
  17. });
  18. if (!user) {
  19. return {
  20. message: "user-not-found",
  21. code: 404,
  22. };
  23. }
  24. if (user.password !== password) {
  25. return {
  26. message: "wrong-password",
  27. code: 401,
  28. };
  29. }
  30. if (!user.isPhoneVerified) {
  31. return {
  32. message: "please-verify-your-phone-first",
  33. code: 403,
  34. payload: {
  35. userID: user._id.toString()
  36. }
  37. };
  38. }
  39. if (!user.isApproved) {
  40. return {
  41. message: "your-account-is-currently-under-review-we-will-get-back-to-you",
  42. code: 200,
  43. };
  44. }
  45. const accessToken = jwt.sign(
  46. {
  47. companyName: user.companyName,
  48. fullName: user.fullName,
  49. userID: user._id,
  50. mail: user.mail
  51. },
  52. process.env.JWT_SECRET as string,
  53. {
  54. expiresIn: "4h"
  55. }
  56. );
  57. await redis.setex(user._id.toString(), 14400, accessToken);
  58. const refreshToken = jwt.sign(
  59. {
  60. companyName: user.companyName,
  61. fullName: user.fullName,
  62. userID: user._id,
  63. mail: user.mail
  64. },
  65. process.env.JWT_SECRET as string,
  66. {
  67. expiresIn: "30d"
  68. }
  69. );
  70. user.refreshToken = refreshToken;
  71. await user.save();
  72. return {
  73. message: "login-successful",
  74. code: 200,
  75. payload: {
  76. refreshToken,
  77. accessToken,
  78. user: {
  79. phoneNumber: user.phoneNumber,
  80. companyName: user.companyName,
  81. userID: user._id.toString(),
  82. firstName: user.firstName,
  83. lastName: user.lastName,
  84. fullName: user.fullName,
  85. mail: user.mail,
  86. },
  87. },
  88. };
  89. };
  90. export default login;