2017-04-18 7 views
0

Ich mache eine AJAX-Anmeldung mit NodeJS. Dies ist meine aktuellen Code:NodeJS + Ajax + Login-Formular

routes.js:

app.post('/login', (req, res, next) => { 
    passport.authenticate('local-login', (err, user, info) => { 
     if (err) 
      return next(err); 

     if (!user) 
      return res.json({type: 'error', response: info}); 

     req.logIn(user, (err) => { 
      if (err) 
       return next(err); 

      //return res.json({type: 'success', response: user}); 
      return res.redirect(req.originalUrl); 
      //return res.redirect(req.get('referer')); 
     }); 
    })(req, res, next); 
}); 

custom.js

let login =() => { 
$.post("/login", { email: $('#inputUsername').val(), password: $('#inputPassword').val() }) 
.done((data) => { 
    if(data.type === 'error'){ 
     $("#logFormError").html('<b>Error:</b> ' + (data.response.message ? data.response.message : data.response)); 

     if(!$("#logFormError").is(":visible")) 
      $("#logFormError").toggle(); 
    }else{ 
     if($("#logFormError").is(":visible")) 
      $("#logFormError").toggle(); 
    } 
}) 
.fail((error) => { 
    $("#logFormError").html('<b>Error:</b> ' + error); 

    if(!$("#logFormError").is(":visible")) 
     $("#logFormError").toggle(); 
})} 

replaysController.js (die Seite, die ich jetzt das Anmeldeformular bin Anzeige):

res.render('../views/pages/replays', {replay: replay, user: req.user}); 

Was ich versuche zu erreichen, ist die Seite, die ich gerade mit den neuen Login-Informationen bin. Ich möchte nicht Client-Javascript verwenden, um mit den verschiedenen Elementen der Seite zu spielen, weil die Seite völlig anders sein kann (Home, Replays, Shop, Foren ...), also sind die Elemente nicht die gleichen und nicht generisch.

Wie Sie sehen können, habe ich bereits res.redirect getestet (req.get ('referer')); und andere, aber die Seite leitet nicht um, sie macht nur die Anfrage und bleibt dort.

Was mache ich falsch?

Antwort

1

res.redirect() wird nicht die Browserseite umleiten, nur die AJAX-Anfrage. Sie können dies wahrscheinlich überprüfen, indem Sie die Netzwerkkarte der Prüfwerkzeuge in Ihrem Browser verwenden, um die anfängliche AJAX-Anfrage und die nachfolgende AJAX-Anfrage nach einer 301-Antwort von der ersten Anfrage anzuzeigen.

Ich stelle mir vor, dass Sie nicht wollen, dass die AJAX-Anfrage umgeleitet wird, möchten Sie den Browser des Benutzers umgeleitet werden. Im Falle einer erfolgreichen Anmeldung würde ich vorschlagen, dass Sie mit einem JSON-Blob antworten, der eine erfolgreiche Statusanzeige und die URL enthält, an die umgeleitet werden soll. Sie können dann JavaScript auf dem Frontend verwenden, um den Browser des Benutzers an den Speicherort umzuleiten, der von Ihrem AJAX-Endpunkt zurückgegeben wurde, indem Sie window.location.href festlegen.

+0

Nun, ich weiß nicht, wie ich nicht darüber nachgedacht habe. Wie auch immer, gibt es eine andere Möglichkeit, die js-Variablen zu aktualisieren, die in den ejs kompiliert werden, ohne umleiten zu müssen? –

Verwandte Themen