This commit is contained in:
David Arranz 2019-08-03 19:11:32 +02:00
parent c129a4f35c
commit d964ba3264
4 changed files with 49 additions and 9 deletions

View File

@ -46,10 +46,7 @@ passport.use('local-email', new LocalStrategy(localEmailOptions, async (email, p
return done(null, false, { message: 'User not found' }) return done(null, false, { message: 'User not found' })
} else { } else {
console.log('aaaaaaaaaaaaaaaaaaa1');
var password_encoded = crypto.createHash('sha512').update(password).digest('hex'); var password_encoded = crypto.createHash('sha512').update(password).digest('hex');
console.log('aaaaaaaaaaaaaaaaaaa2');
console.log(password_encoded);
const isPasswordValid = await user.comparePassword(password_encoded); const isPasswordValid = await user.comparePassword(password_encoded);
if (!isPasswordValid) { if (!isPasswordValid) {
return done(null, false, { message: 'Wrong Password' }) 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) if (userRecord.toJSON().disabled)
return done(null, false, { message: 'User disabled in fb' }) return done(null, false, { message: 'User disabled in fb' })
else else
return done(null, true, { message: 'Register user' }); return done(null, userRecord.toJSON(), { message: 'Register user' });
} }
else else
return done(null, false, { message: 'User not validate in fb' }); return done(null, false, { message: 'User not validate in fb' });
}) })
.catch(function (error) { .catch(function (error) {
//Servicio firebase caido o no funciona pero devuelvo el usuario //Servicio firebase caido o no funciona pero devuelvo el usuario
const user = {
phone: phone,
fbuid: fbuid
};
return done(null, user, error); return done(null, user, error);
}) })
} catch (error) { } catch (error) {
@ -98,14 +99,14 @@ passport.use('local-phone', new LocalStrategy(localPhoneOptions, async (phone, f
// JWT // JWT
passport.use('jwt', new CustomStrategy(async (req, done) => { passport.use('jwt', new CustomStrategy(async (req, done) => {
const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null); const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null);
console.log(token);
if (!token) { if (!token) {
return done(null, false, { message: 'Unauthorized'}); return done(null, false, { message: 'Unauthorized'});
} }
const result = securityHelper.verify(token); const result = securityHelper.verify(token);
if (result) { if (result) {
console.log(result);
//recuperamos el usuario de la petición //recuperamos el usuario de la petición
let user = await authService.extraMethods.findUser({ phone: result.phone}); let user = await authService.extraMethods.findUser({ phone: result.phone});
if (user){ if (user){

View File

@ -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) { async function register(req, res, next) {
function cleanAdminData(user) { function cleanAdminData(user) {
@ -116,7 +134,7 @@ async function regenerateToken(req, res, next) {
const result = { token: tokens.token }; const result = { token: tokens.token };
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK); return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
} catch(error) { } catch(error) {
controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res); return controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res);
} }
} else { } else {
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED); return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED);
@ -143,6 +161,7 @@ async function rejectToken(req, res, next) {
module.exports = { module.exports = {
login, login,
login2, login2,
loginWithPhone,
register, register,
regenerateToken, regenerateToken,
rejectToken, rejectToken,

View File

@ -12,7 +12,7 @@ const AccessValidator = require('../../middlewares/accessValidator');
//const postHandler = new ModelHandler(models.Post); //const postHandler = new ModelHandler(models.Post);
routes.post('/auth', routes.post('/auth',
SchemaValidator(authValidation.LoginInputType, true), SchemaValidator(authValidation.LoginWinEmailInputType, true),
AccessValidator.isRegisteredUserEmail, AccessValidator.isRegisteredUserEmail,
authController.login, authController.login,
); );
@ -23,12 +23,21 @@ routes.get('/auth',
authController.login2, authController.login2,
); );
// Registro de usuario a partir del usuario de Firebase y
// los datos del formulario.
routes.post('/register', routes.post('/register',
SchemaValidator(authValidation.RegisterInputType, true), SchemaValidator(authValidation.RegisterInputType, true),
AccessValidator.isRegisteredUserPhone, AccessValidator.isRegisteredUserPhone,
authController.register, authController.register,
); );
routes.get('/loginWithPhone',
SchemaValidator(authValidation.LoginWithPhoneInputType, true),
AccessValidator.isRegisteredUserPhone,
authController.loginWithPhone,
);
routes.get('/pepepe', AccessValidator.isLoggedUser, routes.get('/pepepe', AccessValidator.isLoggedUser,
function (req, res, next) { function (req, res, next) {
res.send(req.user.email); res.send(req.user.email);

View File

@ -5,6 +5,16 @@ const LoginInputType = Joi.object().keys({
password: Joi.string().required(), 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({ const RegisterInputType = Joi.object().keys({
phone: Joi.string().required(), phone: Joi.string().required(),
email: Joi.string().required(), email: Joi.string().required(),
@ -21,7 +31,8 @@ const LoginOutputType = Joi.object().keys({
module.exports = { module.exports = {
LoginInputType, LoginWithPhoneInputType,
LoginWithEmailInputType,
RegisterInputType, RegisterInputType,
LoginOutputType LoginOutputType
}; };