login.post.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { defineEventHandler, readBody, setResponseStatus } from 'h3';
  2. import {
  3. clearRefreshTokenCookie,
  4. setRefreshTokenCookie,
  5. } from '~/utils/cookie-utils';
  6. import { generateAccessToken, generateRefreshToken } from '~/utils/jwt-utils';
  7. import { MOCK_USERS } from '~/utils/mock-data';
  8. import {
  9. forbiddenResponse,
  10. useResponseError,
  11. useResponseSuccess,
  12. } from '~/utils/response';
  13. export default defineEventHandler(async (event) => {
  14. const { password, username } = await readBody(event);
  15. if (!password || !username) {
  16. setResponseStatus(event, 400);
  17. return useResponseError(
  18. 'BadRequestException',
  19. 'Username and password are required',
  20. );
  21. }
  22. const findUser = MOCK_USERS.find(
  23. (item) => item.username === username && item.password === password,
  24. );
  25. if (!findUser) {
  26. clearRefreshTokenCookie(event);
  27. return forbiddenResponse(event, 'Username or password is incorrect.');
  28. }
  29. const accessToken = generateAccessToken(findUser);
  30. const refreshToken = generateRefreshToken(findUser);
  31. setRefreshTokenCookie(event, refreshToken);
  32. return useResponseSuccess({
  33. ...findUser,
  34. accessToken,
  35. });
  36. });