Express-JWT nie może uzyskać dostępu req.user z katalogu tras

głosy
0

Nowy wyrazić ...

Mogę przejść req.userkiedy obsługi żądań w moim app.jspliku. Jednak szlaki że definiują wewnątrz moim folderze tras (w szczególności routes/users.js) nie mają req.userchoć uwierzytelniać je app.js (app.use('/users', authenticate);. Jak już wspomniałem, jestem nowy wyrazić więc jestem chyba konfigurowania coś nieprawidłowo. Wszelkie wskazówki są mile widziane! Daj mi znać, jeśli to jest jasne, czy potrzebują Państwo więcej informacji. Dzięki!

app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var dotenv = require('dotenv');
var jwt = require('express-jwt');
var cors = require('cors');
var http = require('http');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
var router = express.Router();

dotenv.load();

var authenticate = jwt({
  secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
  audience: process.env.AUTH0_CLIENT_ID
});

app.use(cors());
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());


app.use('/', routes);
app.use('/users', users);
app.use('/users', authenticate);
app.use('/secured', authenticate);


app.get('/ping', function(req, res) {
  res.send(All good. You don't need to be authenticated to call this);
});


app.get('/secured/ping', function(req, res) {
  // req.user works here!
  res.status(200).send(All good. You only get this message if you're authenticated);
});

var port = process.env.PORT || 3001;

http.createServer(app).listen(port, function (err) {
  console.log('listening in http://localhost:' + port);
});

module.exports = app;

Trasy / users.js

var models  = require('../models');
var express = require('express');
var router  = express.Router();

router.post('/', function(req, res) {
  // req.user = undefined
  console.log(user:  + req.user.sub)
  models.User.findOrCreate({
    where: {tokenId: req.user.sub},
    defaults: {
      name: req.body.name,
      tokenId: req.user.sub,
      points: 0
    }
  }).then(function(user) {
    res.json(JSON.stringify(user));
  });
});

module.exports = router;
Utwórz 08/03/2016 o 04:54
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Myślę, że problem jest z zamawiania poniższego kodu w app.js

//some code
app.use('/users', users);
app.use('/users', authenticate);
//some code

Nodejs działa w sposób sekwencyjny. Tak, będzie to czytać trasę użytkowników w szlaki / users.js a potem uwierzytelnienia funkcji. W ten sposób nie będzie niezdefiniowana req.userfunkcja jako Uwierzytelnij nazywa się potem.

Jeśli próbujesz uzyskać dostęp req.userpo app.use('/users', authenticate), to nie będzie niezdefiniowana (Ekspresowa-JWT działa poprawnie).

Teraz, jeśli zmiany kodu do

//some code
app.use('/users', authenticate);
app.use('/users', users);
//some code

następnie będzie uwierzytelnienia użytkownika i umieścić obiekt użytkownika w req.useri mogą być dostępne później.

Nadzieję, że to działa dla Ciebie. Daj mi znać, jeśli istnieje jakikolwiek problem.

Odpowiedział 08/03/2016 o 05:13
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more