2016-04-27 4 views
3

Ich habe eine Node Express RESTful API mit jsonwebtoken als Authentifizierungsmethode erstellt. Aber nicht in der Lage, das x-access-token als Header mit angular js zu übergeben.So übergeben Sie JsonWebToken x-access-token durch angular js

meine JWT Token-Authentifizierung Skript ist,

apps.post('/authenticate', function(req, res) { 

    // find the item 
    Item.findOne({ 
     name: req.body.name 
    }, function(err, item) { 

     if (err) throw err; 

     if (!item) 
     { 
      res.json({ success: false, message: 'Authentication failed. item not found.' }); 
     } 
     else if (item) 
     { 

      // check if password matches 
      if (item.password != req.body.password) 
      { 
       res.json({ success: false, message: 'Authentication failed. Wrong password.' }); 
      } 
      else 
      { 

       // if item is found and password is right 
       // create a token 
       var token = jwt.sign(item, app.get('superSecret'), { 
        expiresIn: 86400 // expires in 24 hours 
       }); 



        res.json({ 
         success: true, 
         message: 'Enjoy your token!', 
         token: token 
        }); 





      }  

     } 

    }); 
}); 

Middleware, die das Token,

apps.use(function(req, res, next) { 

    // check header or url parameters or post parameters for token 
    var token = req.body.token || req.params.token || req.headers['x-access-token']; 

    // decode token 
    if (token) 
    { 

     // verifies secret and checks exp 
     jwt.verify(token, app.get('superSecret'), function(err, decoded) {   
      if (err) 
      { 
       return res.json({ success: false, message: 'Failed to authenticate token.' });  
      } 
      else 
      { 
       // if everything is good, save to request for use in other routes 
       req.decoded = decoded; 
       next(); 
      } 
     }); 

    } 
    else 
    { 

     // if there is no token 
     // return an error 
     return res.status(403).send({ 
      success: false, 
      message: 'No token provided.' 
     }); 

    } 

}); 

Schließlich Skript der GET-Methode ist,

app.get('/display', function(req, res) { 
    Item.find({}, function(err, items) { 



      $http.defaults.headers.common['X-Access-Token']=token; 

      res.json(items); 
}); 
}); 

Aber es ist richtig überprüft wird konnte immer nicht authentifiziert werden. Bitte helfen Sie mir, dieses Problem zu lösen. Ich bin hier wirklich festgefahren.

Es wird immer nur die folgende Meldung angezeigt, dass die Authentifizierung fehlgeschlagen ist.

{"success":false,"message":"No token provided."} 
+0

Sie, dass vor hat zu suchen und was hast du bekommen? –

+0

@jicks Können Sie bitte Ihre eckige Route zeigen? –

Antwort

5

Wenn Sie $ http als die Abhängigkeit in Ihrem Winkel Controller verwenden dann würde dies helfen, ich denke -

var token = this.AuthToken.getToken(); 
$http.get('/api/me', { headers: {'x-access-token': token} }); 

Ich werde dies, um Ihren Code entsprechend ändern, wenn Sie Ihre Winkel Code laden.

+0

Aber es ist nicht vollständig Winkelcode. Ich habe das angular js-Skript im Knoten js verwendet, um x-access-token als Header zu übergeben. – jicks

+1

Sie können diesen Artikel lesen - [using-json-web-tokens-node-js] (http://www.sitepoint.com/using-json-web-tokens-node-js/). Ich denke, es wird Ihnen helfen, Informationen darüber zu bekommen, wonach Sie suchen. –

+0

Noch habe ich keine Ahnung, wie man Header übergibt. @ Sk Arif – jicks

1

Der Kunde sollte das Token im Authorization-Header, mit dem Bearer-Schema als ‚X‘ Header seit 2012 veraltet war das Senden:

:

Ihr Knoten jetzt entlang der Linien wäre

apps.post('/authenticate', function(req, res) { 
    ..... 
    var token = 'Bearer' + ' ' + jwt.sign(item, app.get('superSecret'), { 
     expiresIn: 86400 // expires in 24 hours 
    }); 
    ..... 
} 

apps.use(function(req, res, next) { 
    // Trim out the bearer text using substring 
    var token = req.get('Authorization').substring(7); 
    .... 
} 

Dann wird Ihr Winkel Code würde:

var token = this.AuthToken.getToken(); 
$http.get('/api/me', { headers: {'Authorization': token} }); 
+0

Nicht alle Helden tragen Cape, aber ist das der neue Weg vorwärts? – CalebC

+0

@CalebC haha ​​danke und ich glaube schon! – Midas