/var/www/greso.tech/server/nsm/controllers/auth
NameSizeModeActions
changePassword.js20880644editdlrm
getLink.js8750644editdlrm
refreshToken.js4460644editdlrm
resetPassword.js13140644editdlrm
signin.js45120644editdlrm
signout.js4610644editdlrm
signup.js4610644editdlrm
Edit: /var/www/greso.tech/server/nsm/controllers/auth/signin.js (4512B)
module.exports = function ({ db, logger }) { const bcrypt = require('bcryptjs') const jwt = require('jsonwebtoken') const RefreshTokenUtils = require('../../utils/refreshToken.util') const { NotFound, BadRequest } = require('../../responseModels/errors') const { isSet, isEmail, isPhone, isEmpty, minLength, isNumber } = require('../../utils/validator.util') return async (req, res, next) => { logger.child({ path: req.path, request: req.body }).info() let t1 = performance.now() try { const { login, password, app, platform, deviceId, googleId, googleName, googleToken } = req.body const ipAddress = req.headers['x-forwarded-for'] || req.socket.remoteAddress const userAgent = req.get('User-Agent') let name = isSet(googleName) ? googleName : '' if (!isSet(platform)) { throw new BadRequest({ code: 1017, lang: req.user?.languageCode }) } if (!isSet(app)) { throw new BadRequest({ code: 1018, lang: req.user?.languageCode }) } if (!isSet(deviceId)) { throw new BadRequest({ code: 1019, lang: req.user?.languageCode }) } let foundUser = null let foundUserEmail = null if (isSet(googleId) && !isEmpty(googleId)) { // google авторизация // найти пользователя по googleId foundUser = await db.user.findOne({ where: { googleId } }) if (!foundUser) { // не нашли // найти по email const roleId = 7; // Client TODO role key foundUser = await db.userEmail.findOne({ where: { email: login } }) if (!foundUser) { // create user foundUser = await db.user.create({ roleId, googleId }) // create email foundUser = await db.userEmail.create({ name: name, email: login, }) // !!! создается без логина // !!! нужно дать пользователю возможность создать логин если его нет } else { // если нашли присвоить googleId foundUser.googleId = googleId await foundUser.save() } } } else { // авторизация по логину и паролю if ((!isSet(login) || isEmpty(login)) && !isPhone(login) && !isEmail(login)) { throw new BadRequest({ code: 1002, lang: req.user?.languageCode }) } if (!isSet(password) || isEmpty(password)) { throw new BadRequest({ code: 1005, lang: req.user?.languageCode }) } if (isEmail(login)) { // auth by email try{ foundUserEmail = ( await db.userEmail.findOne({ where: { email: login } }) ) foundUser = ( await db.user.findOne({ where: { id: foundUserEmail.userId } }) ) }catch(e){ throw new BadRequest({ code: 2081, lang: req.user?.languageCode }) } } if (!foundUser || !foundUserEmail) { throw new NotFound({ code: 1007, lang: req.user?.languageCode }) } if (foundUserEmail) { const passwordIsValid = await bcrypt.compare(password, foundUserEmail.passwordHash) if (!passwordIsValid) { throw new BadRequest({ code: 1007, lang: req.user?.languageCode }) } } } let accessToken = await RefreshTokenUtils.createAccessToken({ db, app, deviceId, platform, userId: foundUser.id }) let refreshToken = await db.refreshToken.findOne({ where: { app, deviceId, userId: foundUser.id } }) if (refreshToken !== null) { await db.refreshToken.destroy({ where: { id: refreshToken.id } }) } refreshToken = await RefreshTokenUtils.createRefreshToken({ db, app, deviceId, platform, userId: foundUser.id }) // if (googleToken) { // const gToken = await db.userGoogleToken.findOne({ where: { token: googleToken } }) // if (gToken) { // //обновить // gToken.token = googleToken // gToken.save() // } else { // // создать // db.userGoogleToken.create({ // token: googleToken, // userId: foundUser.id, // deviceId: deviceId // }) // } // } db.userLoginHistory.create({ ipAddress, userAgent, app, deviceId, platform, userId: foundUser.id }) const time = performance.now() - t1 return res.status(200).json({ accessToken, refreshToken, time }) } catch (err) { next(err) } } }