Allgemeine Frage zur Realisierung eines Projekts mit Node

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Allgemeine Frage zur Realisierung eines Projekts mit Node

    Guten Tag,

    bei meinem Projekt muss eine Android App auf einen Node Server zugreifen. Dazu entwickel ich eine art Api die alle Funktionen enthält die sowohl der Web teil als auch die App selbst nutzen. Die Kommunikation zwischen Android und Node funktioniert soweit schon mal, nur habe ich aktuell das Problem das ich nicht wirklich weiß was der beste Weg ist um in Node selbst zu kommunizieren. Aktuell sieht meine Implementierung wie folgt aus:

    Ich habe eine route um die Benutzer Daten in der Datenbank zu überprüfen

    Quellcode

    1. router.get('/credentialscheck/:username/:passcode', function(req, res, next) {
    2. var credentials = {
    3. username : req.params.username,
    4. passcode : req.params.passcode
    5. };
    6. connection.query("SELECT * FROM users WHERE username='"+credentials.username+"' AND password = "+credentials.passcode,function (err,rows,fields) {
    7. if(err) throw err ;
    8. if(rows.length == 1){
    9. res.send(true);
    10. }else{
    11. res.send(false);
    12. }
    13. });
    14. //res.render('credentialscheck',credentials);
    15. });
    Alles anzeigen

    Diese gibt einfach nur true oder false zurück. Dadurch kann ich die Seite von einem Android gerät aus aufrufen und damit eine Login Funktion realisieren.

    Wenn ich die Selbe Abfrage jetzt über Node durchführe nutze ich folgenden Code


    Quellcode

    1. var request = require('request')
    2. ...
    3. router.post('/login',function (req,res,next) {
    4. var requestString = 'http://192.168.0.29:8081/credentialscheck/'+req.body.username + '/' + req.body.password;
    5. console.log(requestString);
    6. request(requestString,function (error,response,body) {
    7. if(error) throw error;
    8. res.send('Login');
    9. console.log(body);
    10. });
    11. });
    Alles anzeigen
    Dadurch erhalte ich auch true oder false und kann dies verwenden um den login auf der Node Seite zu realisieren. Was mich jetzt allerdings stört ist das ich auf der Node Seite immer einen neuen Seitenaufruf machen müsste. Mich würde mal interessieren ob es für mein Problem elegantere Lösungen gibt bei denen nicht ständig eine neue Seite geladen werden muss.

    PS: Wer mir sagen kann wie ich die Hostadresse des Express Servers Abfragen kann so das ich sie nicht im code Hardkodieren muss wäre ein Held für mich.

    Ich wünsche einen schönen Tag!
  • Sind das verschiedene Node-Prozesse? Wieso nicht die Userabfrage in eine Funktion auslagern und in den beiden Endpunkten verwenden:

    JavaScript-Quellcode

    1. const express = require('express')
    2. const router = express.Router()
    3. router.get('/credentialscheck/:username/:passcode', function(req, res) {
    4. checkCredentials(req.params.username, req.params.passcode)
    5. .then(function(result) {
    6. res.send(result)
    7. })
    8. .catch(function(error) {
    9. res.sendStatus(500)
    10. throw error
    11. })
    12. })
    13. router.post('/login', function(req, res) {
    14. checkCredentials(req.body.username, req.body.password)
    15. .then(function(result) {
    16. res.send('Login')
    17. console.log(result)
    18. })
    19. .catch(function(error) {
    20. res.sendStatus(500)
    21. throw error
    22. })
    23. })
    24. function checkCredentials(username, password) {
    25. return Promise(function(resolve, reject) {
    26. connection
    27. .query("SELECT * FROM users WHERE username='"
    28. + username
    29. + "' AND password = "
    30. + password,
    31. function(err, rows) {
    32. if (err) return reject(err)
    33. if (rows.length == 1) {
    34. resolve(true)
    35. } else {
    36. resolve(false)
    37. }
    38. })
    39. })
    40. }
    Alles anzeigen

    tiobald schrieb:

    PS: Wer mir sagen kann wie ich die Hostadresse des Express Servers Abfragen kann so das ich sie nicht im code Hardkodieren muss wäre ein Held für mich.
    Selbstreferenz ist immer über den Namen "localhost" oder der IP "127.0.0.1" möglich. Zudem lassen sich der Name über os.hostname() und die IPs über os.networkInterfaces() auslesen.


    Und gleich noch ein paar Sicherheitsanmerkungen:
    • man speichert keine Passwörter (erst recht nicht im Klartext)
    • Passwörter haben in einer URL nichts verloren (nur sichere Übertragungswege wählen)
    • SQL-Statements nicht einfach so zusammen basteln. Das erlaubt SQL-Injektion.
  • Hallo,

    soweit ich das als blutiger Node Anfänger beurteilen kann handelt es sich nur um einen Prozess(Alles läuft auf in einem Server). Das mit den Funktionen werde ich dann wohl so machen, danke dafür ! Über das Network Interface bekomme ich alle Adressen/Netzwerke die auf dem Server hinterlegt sind richtig? Das ist dann von der Implementierung her etwas umständlich weil auf dem Windows Rechner(Auf dem der Testserver läuft) mehrere Netzwerke hinterlegt sind und ich wüsste auf die schnelle nicht wie ich da die Richtige bekomme. Naja ich werde dann wohl einfach wie vorgeschlagen "localhost" verwenden und den Port Manuell eintragen. Für die geplante Anwendung dürften das ohne hin nur recht wenige Einträge sein. Vielen Dank auch für die Sicherheits Hinweise. Ich bin mir deren bewusst, allerdings ist das Projekt aktuell nur der Vorläufer zum eigentlichen Projekt da ich mich erst einmal mit Node vertraut machen wollte. Im richtigen Projekt werde ich den Passwort Hash zwar zugegeben auch über Post übertragen, aber da in der Datenbank wirklich gar keine sensiblen Daten gespeichert werden mache ich mir da keine großen Sorgen. Das Benutzer System ist nur dazu da um Statistiken zu erfassen.