選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

registerSaga.js 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { all, takeLatest, call, put } from "@redux-saga/core/effects";
  2. import { JWT_REFRESH_TOKEN, JWT_TOKEN } from "../../constants/localStorage";
  3. import { addHeaderToken } from "../../request";
  4. import { attemptLogin } from "../../request/loginRequest";
  5. import { attemptFetchProfile } from "../../request/profileRequest";
  6. import { attemptRegister } from "../../request/registerRequest";
  7. import { authScopeSetHelper } from "../../util/helpers/authScopeHelpers";
  8. import {
  9. fetchUserError,
  10. fetchUserSuccess,
  11. } from "../actions/login/loginActions";
  12. import { setMineProfile } from "../actions/profile/profileActions";
  13. import { REGISTER_USER_FETCH } from "../actions/register/registerActionConstants";
  14. import jwt from "jsonwebtoken";
  15. import {
  16. fetchRegisterUserError,
  17. fetchRegisterUserSuccess,
  18. } from "../actions/register/registerActions";
  19. import { rejectErrorCodeHelper } from "../../util/helpers/rejectErrorCodeHelper";
  20. import i18next from "i18next";
  21. function* fetchRegisterUser({ payload }) {
  22. try {
  23. const requestBody = new FormData();
  24. requestBody.append("email", payload.values.mail);
  25. requestBody.append("password", payload.values.registerPassword);
  26. requestBody.append("file", payload.values.image);
  27. requestBody.append("company[name]", payload.values.nameOfFirm);
  28. requestBody.append("company[PIB]", payload.values.PIB);
  29. if (payload.values.phoneNumber.toString().length !== 0)
  30. requestBody.append(
  31. "company[contacts][telephone]",
  32. payload.values.phoneNumber
  33. );
  34. if (payload.values.location.toString().length !== 0)
  35. requestBody.append(
  36. "company[contacts][location]",
  37. payload.values.location
  38. );
  39. if (payload.values.website.toString().length !== 0)
  40. requestBody.append("company[contacts][web]", payload.values.website);
  41. yield call(attemptRegister, requestBody);
  42. const { data } = yield call(attemptLogin, {
  43. email: payload.values.mail,
  44. password: payload.values.registerPassword,
  45. });
  46. if (data.token) {
  47. const token = data.token;
  48. const refresh = data.refresh;
  49. const tokenDecoded = jwt.decode(token);
  50. const refreshDecoded = jwt.decode(refresh);
  51. const accessToken = {
  52. token: token,
  53. exp: tokenDecoded.exp,
  54. };
  55. const refreshToken = {
  56. token: refresh,
  57. exp: refreshDecoded.exp,
  58. };
  59. const userId = tokenDecoded._id;
  60. yield call(authScopeSetHelper, JWT_TOKEN, token);
  61. yield call(authScopeSetHelper, JWT_REFRESH_TOKEN, refresh);
  62. yield call(addHeaderToken, token);
  63. const profileData = yield call(attemptFetchProfile, userId);
  64. if (profileData) yield put(setMineProfile(profileData.data));
  65. yield put(
  66. fetchUserSuccess({
  67. jwtToken: accessToken,
  68. refreshToken: refreshToken,
  69. userId,
  70. })
  71. );
  72. }
  73. if (payload.handleResponseSuccess) {
  74. yield call(payload.handleResponseSuccess);
  75. }
  76. yield put(fetchRegisterUserSuccess());
  77. } catch (e) {
  78. console.dir(e);
  79. let type = "server";
  80. if (
  81. e?.response?.data?.toString() === "User with email already exists!" ||
  82. e?.response?.data?.toString() === '"email" must be a valid email'
  83. ) {
  84. type = "mail";
  85. } else if (
  86. e?.response?.data?.toString() === "User with PIB already exists!"
  87. ) {
  88. type = "PIB";
  89. }
  90. const error = {
  91. error: e,
  92. type,
  93. };
  94. if (payload.handleResponseError) {
  95. yield call(payload.handleResponseError, error);
  96. }
  97. if (e.response && e.response.data) {
  98. console.log(e.response.status);
  99. let errorMessage = yield call(rejectErrorCodeHelper, e.response.status);
  100. if (e.response.status === 400 || e.response.status === 404) {
  101. errorMessage = i18next.t("login.wrongCredentials", {
  102. lng: "rs",
  103. });
  104. }
  105. yield put(fetchUserError(errorMessage));
  106. }
  107. yield put(fetchRegisterUserError());
  108. }
  109. }
  110. export default function* registerSaga() {
  111. yield all([takeLatest(REGISTER_USER_FETCH, fetchRegisterUser)]);
  112. }