index.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import crypto from "crypto";
  2. import jwt from "jsonwebtoken";
  3. import {
  4. User
  5. } from "../../../models/User";
  6. import {
  7. LoginResult,
  8. LoginInput
  9. } from "./types";
  10. export const login = async (input: LoginInput): Promise<LoginResult> => {
  11. const {
  12. mail,
  13. password
  14. } = input;
  15. const user = await User.findOne({
  16. mail
  17. });
  18. if (!user) {
  19. return {
  20. statusCode: 404,
  21. success: false,
  22. message: "Kullanıcı bulunamadı",
  23. code: 404,
  24. };
  25. }
  26. const hashedPassword = crypto.createHash("md5").update(password).digest("hex");
  27. if (user.password !== hashedPassword) {
  28. return {
  29. statusCode: 401,
  30. success: false,
  31. message: "Hatalı şifre",
  32. code: 401,
  33. };
  34. }
  35. if (!user.isMailVerified) {
  36. return {
  37. statusCode: 403,
  38. success: false,
  39. message: "Lütfen email adresinizi doğrulayın",
  40. code: 403,
  41. payload: {
  42. isMailVerified: user.isMailVerified,
  43. mail: user.mail,
  44. },
  45. };
  46. }
  47. const accessToken = jwt.sign(
  48. {
  49. userId: user._id
  50. },
  51. process.env.JWT_SECRET as string,
  52. {
  53. expiresIn: "4h"
  54. }
  55. );
  56. const refreshToken = jwt.sign(
  57. {
  58. userId: user._id
  59. },
  60. process.env.JWT_REFRESH_SECRET as string || process.env.JWT_SECRET as string,
  61. {
  62. expiresIn: "30d"
  63. }
  64. );
  65. user.refreshToken = refreshToken;
  66. await user.save();
  67. return {
  68. statusCode: 200,
  69. success: true,
  70. message: "Giriş başarılı",
  71. code: 200,
  72. payload: {
  73. accessToken,
  74. refreshToken,
  75. user: {
  76. userID: user._id.toString(),
  77. mail: user.mail,
  78. firstName: user.firstName,
  79. lastName: user.lastName,
  80. fullName: user.fullName,
  81. phoneNumber: user.phoneNumber,
  82. companyName: user.companyName,
  83. },
  84. },
  85. };
  86. };
  87. export default login;