From d964ba326491de78bc07e947a335d11b180a210a Mon Sep 17 00:00:00 2001 From: david Date: Sat, 3 Aug 2019 19:11:32 +0200 Subject: [PATCH] . --- core/passport.js | 13 +++++++------ modules/auth/auth.controller.js | 21 ++++++++++++++++++++- modules/auth/auth.routes.js | 11 ++++++++++- modules/auth/auth.validations.js | 13 ++++++++++++- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/core/passport.js b/core/passport.js index 69fcd01..4dfd482 100644 --- a/core/passport.js +++ b/core/passport.js @@ -46,10 +46,7 @@ passport.use('local-email', new LocalStrategy(localEmailOptions, async (email, p return done(null, false, { message: 'User not found' }) } else { - console.log('aaaaaaaaaaaaaaaaaaa1'); var password_encoded = crypto.createHash('sha512').update(password).digest('hex'); - console.log('aaaaaaaaaaaaaaaaaaa2'); - console.log(password_encoded); const isPasswordValid = await user.comparePassword(password_encoded); if (!isPasswordValid) { return done(null, false, { message: 'Wrong Password' }) @@ -80,13 +77,17 @@ passport.use('local-phone', new LocalStrategy(localPhoneOptions, async (phone, f if (userRecord.toJSON().disabled) return done(null, false, { message: 'User disabled in fb' }) else - return done(null, true, { message: 'Register user' }); + return done(null, userRecord.toJSON(), { message: 'Register user' }); } else return done(null, false, { message: 'User not validate in fb' }); }) .catch(function (error) { //Servicio firebase caido o no funciona pero devuelvo el usuario + const user = { + phone: phone, + fbuid: fbuid + }; return done(null, user, error); }) } catch (error) { @@ -98,14 +99,14 @@ passport.use('local-phone', new LocalStrategy(localPhoneOptions, async (phone, f // JWT passport.use('jwt', new CustomStrategy(async (req, done) => { const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null); - console.log(token); + if (!token) { return done(null, false, { message: 'Unauthorized'}); } const result = securityHelper.verify(token); if (result) { - console.log(result); + //recuperamos el usuario de la petición let user = await authService.extraMethods.findUser({ phone: result.phone}); if (user){ diff --git a/modules/auth/auth.controller.js b/modules/auth/auth.controller.js index eccd860..b890e04 100644 --- a/modules/auth/auth.controller.js +++ b/modules/auth/auth.controller.js @@ -50,6 +50,24 @@ async function login2(req, res, next) { } } +async function loginWithPhone(req, res, next) { + try { + console.log(req.user); + const data = { + phone: req.user.phoneNumber, + fbuid: req.user.uid + }; + + //Comprobamos si el usuario ya existe en nuestro sistema + let _user = await authService.extraMethods.findUser(data); + const tokens = securityHelper.generateToken(data); + _user.token = tokens.token; + return controllerHelper.handleResultResponse(_user, null, req.params, res, httpStatus.OK); + } catch (error) { + return controllerHelper.handleErrorResponse(MODULE_NAME, login.name, error, res) + } +} + async function register(req, res, next) { function cleanAdminData(user) { @@ -116,7 +134,7 @@ async function regenerateToken(req, res, next) { const result = { token: tokens.token }; return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK); } catch(error) { - controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res); + return controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res); } } else { return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED); @@ -143,6 +161,7 @@ async function rejectToken(req, res, next) { module.exports = { login, login2, + loginWithPhone, register, regenerateToken, rejectToken, diff --git a/modules/auth/auth.routes.js b/modules/auth/auth.routes.js index 06c58d1..1627b2f 100644 --- a/modules/auth/auth.routes.js +++ b/modules/auth/auth.routes.js @@ -12,7 +12,7 @@ const AccessValidator = require('../../middlewares/accessValidator'); //const postHandler = new ModelHandler(models.Post); routes.post('/auth', - SchemaValidator(authValidation.LoginInputType, true), + SchemaValidator(authValidation.LoginWinEmailInputType, true), AccessValidator.isRegisteredUserEmail, authController.login, ); @@ -23,12 +23,21 @@ routes.get('/auth', authController.login2, ); +// Registro de usuario a partir del usuario de Firebase y +// los datos del formulario. routes.post('/register', SchemaValidator(authValidation.RegisterInputType, true), AccessValidator.isRegisteredUserPhone, authController.register, ); +routes.get('/loginWithPhone', + SchemaValidator(authValidation.LoginWithPhoneInputType, true), + AccessValidator.isRegisteredUserPhone, + authController.loginWithPhone, +); + + routes.get('/pepepe', AccessValidator.isLoggedUser, function (req, res, next) { res.send(req.user.email); diff --git a/modules/auth/auth.validations.js b/modules/auth/auth.validations.js index 9f03bda..e760e5e 100644 --- a/modules/auth/auth.validations.js +++ b/modules/auth/auth.validations.js @@ -5,6 +5,16 @@ const LoginInputType = Joi.object().keys({ password: Joi.string().required(), }); +const LoginWithPhoneInputType = Joi.object().keys({ + phone: Joi.string().required(), + fbuid: Joi.string().required(), +}); + +const LoginWithEmailInputType = Joi.object().keys({ + email: Joi.string().email().required(), + password: Joi.string().required(), +}); + const RegisterInputType = Joi.object().keys({ phone: Joi.string().required(), email: Joi.string().required(), @@ -21,7 +31,8 @@ const LoginOutputType = Joi.object().keys({ module.exports = { - LoginInputType, + LoginWithPhoneInputType, + LoginWithEmailInputType, RegisterInputType, LoginOutputType };