-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauthJwt.js
62 lines (56 loc) · 2.13 KB
/
authJwt.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//Nombre : authJwt.js
//Autor : Camila Jimena Vargas Noriega
//Asignatura : Ingeniería y Desarrollo en la Web
//Práctica : Implementación de una solución basada en una aplicación web II
//Docente : Octavio Aguirre Lozano
import { JsonWebTokenError } from "jsonwebtoken";
// importamos jwt
import jwt from 'jsonwebtoken'
import config from '../config'
//importamos el modelo de User
import User from '../models/User'
//importamos el modelo de Role
import Role from '../models/Role'
//verificamos el token administrado, para esto usaremos headers
export const verifyToken = async (req, res, next) => {
try {
const token = req.headers["x-access-token"];
// en caso de que no tenga token
if(!token) return res.status(403).json({message: "No administró token"})
//verificamos el token
const decoded = jwt.verify(token, config.SECRET)
req.userId = decoded.id;
//buscamos al usuario con ese token
const user = await User.findById(req.userId, {password: 0});
// revisamos si existe o no
if(!user) return res.status(404).json({message: 'el usuario no existe'});
next();
} catch (error) {
// caso error no se encuentra autorizado
return res.status(401).json({message: 'No autorizado'})
}
};
// definir rol de visitante y restricciones
export const isVisitante = async (req, res, next) => {
const user = await User.findById(req.userId)
const roles = await Role.find({_id: {$in: user.roles}})
for (let i = 0; i < roles.length; i++) {
if (roles[i].nombreR==="visitante"){
next();
return;
}
}
return res.status(403).json({message: "Requiere rol de visitante"})
};
//definir rol de admin y restricciones
export const isAdmin = async (req, res, next) => {
const user = await User.findById(req.userId)
const roles = await Role.find({_id: {$in: user.roles}})
for (let i = 0; i < roles.length; i++) {
if (roles[i].nombreR==="admin"){
next();
return;
}
}
return res.status(403).json({message: "Requiere rol de admin"})
}