логин с адресом электронной почты или телефона или логином в node js - PullRequest
1 голос
/ 28 мая 2020

Как я могу войти в систему по электронной почте, телефону или имени пользователя с паролем в node js и mongodb? пользователь может войти в систему, используя адрес электронной почты и пароль, имя пользователя и пароль, телефон и пароль. это похоже на модуль входа в Instagram. вот мой сценарий:

const login = catchAsync(async (req, res) => {
  const { email, password } = req.body;
  const user = await User.findOne({ email });
  if (!user || !(await user.isPasswordMatch(password))) {
    throw new ApiError(httpStatus.UNAUTHORIZED, 'Incorrect email or password');
  }
  const tokens = await tokenService.generateAuthTokens(user.id);
  const response = { user: user.transform(), tokens };
  res.send(response);
});

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Что вы можете попробовать, так это то, что не ограничивайте ваш код, чтобы принимать электронную почту, сделайте его общим и найдите пользователя на основе ввода, подобного этому

const login = catchAsync(async(req, res) => {
  const {
    userEmailPhone,
    password
  } = req.body;
  //suppose in your DB you have email, phone and username fields 
  const user = await User.findOne({
    $or: [{
      "email": userEmailPhone
    }, {
      "phone": userEmailPhone
    }, {
      "userName": userEmailPhone
    }]
  });
  if (!user || !(await user.isPasswordMatch(password))) {
    throw new ApiError(httpStatus.UNAUTHORIZED, 'Incorrect email or password');
  }
  const tokens = await tokenService.generateAuthTokens(user.id);
  const response = {
    user: user.transform(),
    tokens
  };
  res.send(response);
});

ПРИМЕЧАНИЕ : убедитесь, что адрес электронной почты, телефон и имя пользователя уникальны для каждого пользователя

Надеюсь, это поможет

0 голосов
/ 28 мая 2020

Сначала вам нужно проверить, существуют ли адрес электронной почты и пароль, а затем вам нужно проверить правильность комбинации адреса электронной почты и пароля. в вашем случае вы также можете добавить поле, например мобильный телефон, с адресом электронной почты.

const login = catchAsync(async (Request, Response, next) => {
      const { email, password } = Request.body;

      //check if email and password exists
      if (!email || !password) {
        throw new ApiError(httpStatus.UNAUTHORIZED, 'Please provide email and password');
      }

      //check if user exist and password correct
      const user = await User.findOne({ email }).select('+password');

      if (!user || !(await user.isPasswordMatch(password, user.password))) {
        throw new ApiError(httpStatus.UNAUTHORIZED, 'Incorrect email or password');
      }

       //if everything ok, send token to the client
        const tokens = await tokenService.generateAuthTokens(user.id);
        const response = { user: user.transform(), tokens };
        res.send(response);

    });

PS: не рекомендуется напрямую выдавать ошибку. Используйте другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...