Я создал простое промежуточное программное обеспечение для аутентификации, но каким-то образом промежуточное программное обеспечение вообще не вызывается, если, например, я выбрасываю ошибку в своей средней функции, она просто игнорируется, ничего не печатается.
Мне нужно только вызвать промежуточное ПО для аутентификации на маршруте ниже, только для целей тестирования.
My UserRoutes.ts
import auth from '../middleware/auth';
export default class UserRoutes {
public UserController: UserController = new UserController();
public routes(app: Application): void {
// ...
app.route('/api/users/me')
.get(this.UserController.me, auth); // this is where I call my auth middleware
}
В своем промежуточном ПО я в основном обрезаю пространство на предъявителя и пытаюсь найти нужного пользователя из токен, который я получаю после входа в систему. Токены правильно сохранены на моем mongodb.
Мое промежуточное программное обеспечение для аутентификации выглядит следующим образом:
const auth = async (req: IUserRequest, res: Response, next: NextFunction) => {
const token = req.header('Authorization').replace('Bearer ', '');
const msg = { auth: false, message: 'No token provided.' };
if (!token) res.status(500).send(msg);
try {
const data: any = jwt.verify(token, JWT_KEY);
const user = await User.findOne({ _id: data._id, 'tokens.token': token });
if (!user) {
throw new Error("Could not find User");
}
req.user = user;
req.token = token;
next();
} catch (error) {
res.status(401).send({ error: 'Not authorized to access this resource.' });
}
}
export default auth;
UserController.ts:
export class UserController {
///...
public me(req: IUserRequest, res: Response) {
res.send(req.user)
}
}