2017-10-24 6 views
1

Ich versuche, eine GET-Anfrage an meine mLab-Datenbank zu machen. Ich übergebe ein JWT-Token mit der Anfrage und protokolliert es sowohl auf dem Client als auch auf dem Server. Es liest korrekt auf dem Client, zeigt aber Null auf dem Server. Jede Hilfe würde sehr geschätzt werden. Ich benutze Node.js und Angular. Ich bin ziemlich neu, also entschuldige ich mich im Voraus, wenn der Fehler offensichtlich ist.
Hier ist die GET Route Server:Warum ist mein JWT-Token Null auf der Rückseite, aber nicht die Front

router.get('/', (req, res, next) => { 
    var decoded = jwt.decode(req.query.token); 
    console.log(decoded); 
    console.log('employees'); 
    if(decoded) { 
     return Company.find({_id: decoded._id}) 
      .populate('user', 'firstName') 
      .exec(function(err, company) { 
       if (err) { 
        return res.status(500).json({ 
         title: 'An error occurred', 
         error: err 
        }); 
       } 
       res.status(200).json({ 
        message: 'Success', 
        obj: company 
       }); 
      }); 
    } else { 
     return res.status(401).json({ 
      title: 'Not authenticated', 
      error: { 
       message: 'Please create an account or sign in' 
      } 
     }); 
    } 
    console.log(company); 

}); 

Hier ist der Kunde:

getEmployees() { 
    const token = localStorage.getItem('token') 
     ? '?token=' + localStorage.getItem('token') 
     : ''; 
    console.log(token); 
    return this.http.get('http://localhost:3000/company' + token) 
     .map((response: Response) => { 
      const employees = response.json().obj; 
      console.log(employees); 
      let transformedEmployees: Employee[] = []; 
      for (let employee of employees) { 
       transformedEmployees.push(new Employee(
        employee.firstName, 
        employee.lastName, 
        employee.email, 
        employee.password, 
        employee.jobTitle, 
        employee.isAdmin, 
        employee.tasks 
       )); 
      } 
      console.log(transformedEmployees) 
      this.employees = transformedEmployees; 
      return transformedEmployees; 
     }) 
     .catch((error: Response) => { 
      this.errorService.handleError(error.json()); 
      return Observable.throw(error.json()) 
     }); 
} 
+0

Was bedeutet 'console.log (req.query.token);' sagen? Verwenden Sie eine Bibliothek auf der Serverseite für JWT (woher kommt die Dekodierungsfunktion)? Warum verwenden Sie nicht den Schlüssel, der auch beim Signieren des Tokens verwendet wird, zum Entschlüsseln? – MikaS

Antwort

0

Könnten Sie den Code jwt.decode teilen? Überprüfen Sie auch das req.query.token über console.log, bevor Sie es an jwt.decode senden. Wenn Sie die Konsolenausgabe von express eines dieser Aufrufe teilen könnten, wäre es großartig, die Ausgabe der Konsolenprotokolle zu sehen. Ich glaube, das Problem könnte sein, dass Sie es nicht richtig dekodieren, oder dass req.query.token nicht definiert ist.

Mit besten Grüßen, Rafael

0

Sie sollten nicht Ihr Token im Authorization Header Ihrer Anfrage platzieren.

Sie verwenden einen Express Middleware das Token zu entschlüsseln:

const myDecoder = (req, res, next) => { 
    req.user = jwt.decode(req.headers.authorization); 
    next(); 
} 

Dann Sie in Ihrer Route platzieren:

router.get('/', myDecoder, (req, res) => { 
    let user = req.user; 
    console.log(user); 
    console.log('employees'); 
    if (user) { blah }  
    ... 

nicht die gesamten Token über die URL werden soll selbst vorbei.

Verwandte Themen