JWT Auth для NodeJS и Auth0 - PullRequest
       7

JWT Auth для NodeJS и Auth0

0 голосов
/ 27 июня 2018

Я использую Auth0 для аутентификации пользователя в приложении MEAN, которое я разрабатываю. У меня проблема в том, что я разделил модели, маршруты и контроллеры в отдельные файлы. Я следую руководству по Auth0, чтобы узнать, как использовать аутентификацию токена JWT, но я не уверен, где он находится в моей настройке.

Куда принадлежит checkJwt? 1004 *

https://auth0.com/docs/quickstart/backend/nodejs/01-authorization

Тренировочный маршрутизатор

module.exports = function(app) {
    var workouts = require('../controllers/workoutController');

    // workout Routes
    app.route('/api/workouts')
      .get(workouts.getAllWorkouts)
      .post(workouts.createWorkout);

    app.route('/api/workouts/benchmarks')
    .get(workouts.getBenchmarks);

    app.route('/api/workouts/:workoutId')
      .get(workouts.getWorkout)
      .put(workouts.updateWorkout)
      .delete(workouts.deleteWorkout);
  };

Соответствующий контроллер

var mongoose = require('mongoose'),
  Workout = mongoose.model('Workout');

exports.getAllWorkouts = function(req, res) {
  Workout.find({}, function(err, workouts) {
    if (err)
      res.send(err);
    res.json(workouts);
  });
};


exports.getBenchmarks = function(req, res) {
  Workout.find({
    "type":"Benchmark"
  }, function(err, workouts) {
    if (err)
      res.send(err);
    res.json(workouts);
  });
};

exports.createWorkout = function(req, res) {
  var newWorkout = new Workout(req.body);
  newWorkout.save(function(err, workout) {
    if (err)
      res.send(err);
        res.json(workout);
  });
};

exports.getWorkout = function(req, res) {
  Workout.findById(req.params.workoutId, function(err, workout) {
    if (err)
      res.send(err);
    res.json(workout);
  });
};


exports.updateWorkout = function(req, res) {
  Workout.findOneAndUpdate({_id: req.params.workoutId}, req.body, {new: true}, function(err, workout) {
    if (err)
      res.send(err);
    res.json(workout); 
  });
};

exports.deleteWorkout = function(req, res) {
  Workout.remove({
    _id: req.params.workoutId
  }, function(err, workout) {
    if (err)
      res.send(err);
    res.json({ message: 'Workout successfully deleted' });
  });
};

Сообщение тренировки ()

exports.createWorkout = function(req, res) {
  var newWorkout = new Workout(req.body);
  newWorkout.save(function(err, workout) {
    if (err)
      res.send(err);
        res.json(workout);
  });
};

1 Ответ

0 голосов
/ 27 июня 2018

Во-первых, вы должны настроить checkJwt (как в документах ) в отдельном файле и указать его в файлах маршрутизатора.

Давайте посмотрим, как вы можете защитить маршруты в вашем Workout Router:

module.exports = function(app) {
    var workouts = require('../controllers/workoutController');
    var checkJwt = require('./path/to/checkJwt');

    // workout Routes
    app.route('/api/workouts')
      .get(workouts.getAllWorkouts) // unprotected route
      .post(checkJwt, workouts.createWorkout); // protected route

    app.route('/api/workouts/benchmarks')
    .get(workouts.getBenchmarks);

    app.route('/api/workouts/:workoutId')
      .get(workouts.getWorkout)
      .put(workouts.updateWorkout)
      .delete(workouts.deleteWorkout);
};

Функция checkJwt - это промежуточное ПО, которое проверяет, аутентифицирован ли запрос, прежде чем достигнет логики вашего контроллера.

файл checkJwt:

var checkJwt = jwt({
  ...
})

module.exports = checkJwt
...