2017-01-31 5 views
2

Ich bin wenig neu zu Knoten js und so meine alle Konzepte in Bezug auf app.js Konfiguration ist nicht klar. Daher suche Hilfe von der Gemeinschaft.Aufruf der Authentifizierung Middleware durch app.use()

Derzeit habe ich folgenden Code als Middleware für die Authentifizierung in app.js Datei.

  var authChecker = function(req, res, next){ 
     if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token. 
      try{ 
      var authToken; 
      req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : ""; 
      var user = jwt.verify(authToken, 'secretkey'); 
      if(req.query.userName == user.username){ 
       next(); 
      } 
      else{ 
       res.cookie('username', '', {expires: new Date(0)}); 
       res.cookie('token', '', {expires: new Date(0)}); 
       return res.status(401).json({"msg": "Authentication required."}); 
      } 
      } 
      catch(err){ // if not able to validate the token, then expire all the available token 
      res.cookie('username', '', {expires: new Date(0)}); 
      res.cookie('token', '', {expires: new Date(0)}); 
      return res.status(401).json({"msg": "Authentication required."}) 
      } 
     } 
     else{ 
      next(); 
     } 
     }; 

Und ich benutze dies in der gleichen app.js Datei für die Authentifizierung einiger der APIs.

  app.namespace('/api', function() { 
      app.get('/abc', authChecker, abc.cde); 

      app.get('/cde', efg.ghi); //authentication not required for this API. 

Jetzt möchte ich dies modularisieren. Anstatt authChecker in app.js zu definieren, möchte ich es in einer anderen Datei definieren und ähnlich verwenden. Kann mir bitte jemand hier helfen. Ich denke, wir können dies irgendwie mit app.js erreichen, aber nicht genau, wie. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

1

auth.js Datei erstellen, der Code setzen dann hier authChecker Funktion wie diese

var authChecker = function(req, res, next){ 
    if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token. 
    try{ 
     var authToken; 
     req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : ""; 
     var user = jwt.verify(authToken, 'secretkey'); 
     if(req.query.userName == user.username){ 
     next(); 
     } else { 
     res.cookie('username', '', {expires: new Date(0)}); 
     res.cookie('token', '', {expires: new Date(0)}); 
     return res.status(401).json({"msg": "Authentication required."}); 
     } 
    } catch(err) { // if not able to validate the token, then expire all the available token 
     res.cookie('username', '', {expires: new Date(0)}); 
     res.cookie('token', '', {expires: new Date(0)}); 
     return res.status(401).json({"msg": "Authentication required."}) 
    } 
    } else { 
    next(); 
    } 
}; 

module.exports = { 
    authChecker: authChecker, 
} 

in app.js Import wie diese

var auth = require('./auth.js'); // path to auth.js file 
app.get('/abc', auth.authChecker, abc.cde); 

erfahren Sie mehr über NodeJS Modul exportieren: https://nodejs.org/api/modules.html

+0

Vielen Dank allen für die Antwort. Alle Antworten scheinen richtig, aber da diese Antwort detaillierter ist und zuerst beantwortet wird, akzeptiere ich das. – undefined

1

neu erstellen Datei:

authChecker.js

var authChecker = function(req,res,next) { 
//your code goes here 
} 
export default authChecker; // you have to write this line 

So in allen anderen js Dateien, die Sie dies erfordern können:

var authChecker = require("./pathToAuthChecker"); 
1

Sie können die authChecker stellen in einer separaten Datei und exportieren es für den Einsatz in App. js

auth.js

module.exports = { 
    authChecker: function(req, res, next){..logic..} 
} 

app.js

auth = require("auth") //path to auth.js 
app.get("/abc", auth.authChecker, function(req, res){}); 
app.get("/cde", function(req, res){}); 

Angenommen, Ihr Projekt-Layout ist:

/root 
    |-app.js 
    |-auth.js 
Verwandte Themen