it-swarm.com.de

So leiten Sie auf eine andere Seite in node.js um

Ich habe ein Login und eine Anmeldeseite. Wenn ein zufälliger Benutzer sich anmelden möchte und der Login erfolgreich ist, möchte ich ihn auf eine andere .ejs-Seite umleiten (z. B. UserHomePage.ejs). Allerdings habe ich bisher noch nichts ausprobiert.

if (loggedIn)
    {
        console.log("Success!");
        res.redirect('/UserHomePage');
    }
    else
    {
        console.log("Error!");
    }

Ich möchte auch wissen, wie ein Benutzer beim Klicken auf die Schaltfläche umgeleitet wird.

Angenommen, ich befinde mich auf der Benutzerseite, auf der alle Benutzer angezeigt werden. Dann wird "eine weitere benutzte Schaltfläche hinzufügen" angezeigt. Wie mache ich das? Wie kann ich den Benutzer nach dem Klick auf die Seite "Register.js" umleiten?

<h2>List of users</h2>
<ul>
<% uporabniki.forEach(function(user) { %>
<li>  
  <%= user.attributes.name %>
  <%= user.attributes.last name %>
</li>
<% }); %>
</ul>
<h3>Add another user</h3>
<form method="post">
 <input type="submit" value="Add user" />
</form>
13
aiden87

Sie sollten die umleitende Zeile zurückgeben

return res.redirect('/UserHomePage');
35
Rob Brander

Ok, ich werde versuchen, dir anhand eines meiner Beispiele zu helfen. Zunächst müssen Sie wissen, dass ich express für meine Anwendungsverzeichnisstruktur und für das automatische Erstellen von Dateien wie app.js verwende. Mein login.html sieht folgendermaßen aus:

...
<div class="form">
<h2>Login information</h2>
<form action="/login" method = "post">
  <input type="text" placeholder="E-Mail" name="email" required/>
  <input type="password" placeholder="Password" name="password" required/>
  <button>Login</button>
</form>

Wichtig ist hier action = "/ login". Dies ist der Pfad, den ich in meiner index.js (zum Navigieren zwischen den Ansichten) verwende. Dieser Pfad sieht folgendermaßen aus:

app.post('/login', passport.authenticate('login', {
    successRedirect : '/home', 
    failureRedirect : '/login', 
    failureFlash : true
}));

app.get('/home', function(request, response) {
        response.render('pages/home');
});

Dadurch kann ich nach einem erfolgreichen Login auf eine andere Seite umleiten. Es gibt ein hilfreiches Tutorial, das Sie zum Umleiten zwischen den Seiten ausprobieren können:

http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/

Um eine Anweisung wie <% = user.attributes.name%> zu lesen, werfen wir einen Blick auf eine einfache profile.html mit der folgenden Struktur:

<div id = "profile">
<h3>Profilinformationen</h3>
    <form>
        <fieldset>
            <label id = "usernameLabel">Username:</label>
            <input type = "text" id="usernameText" value = "<%= user.user.username %>" />
            <br>
        </fieldset>
    </form>

Um die Attribute der Variablen user zu erhalten, müssen Sie in Ihren routing.js (in meinem Fall index.js) eine Variable user initialisieren. Das sieht so aus

app.get('/profile', auth, function(request, response) {
    response.render('pages/profile', {
        user : request.user
    });
});

Ich verwende Mungo für mein Objektmodell:

var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');
var role     = require('./role');

var userSchema = mongoose.Schema({
    user             : {
        username     : String,
        email        : String,
        password     : String
    }
});

Fragen Sie mich jederzeit nach weiteren Fragen ... Mit freundlichen Grüßen Nazar

4
Nazar Medeiros

Wenn der Benutzer sich erfolgreich in der Node-App angemeldet hat, denke ich, dass Sie Express verwenden, nicht? Nun, Sie können einfach mit res.redirect umleiten. Mögen:

app.post('/auth', function(req, res) {
  // Your logic and then redirect
  res.redirect('/user_profile');
});
2
Eduardo Pereira

Auf andere Weise können Sie window.location.href="your URL" verwenden.

z.B.:

res.send('<script>window.location.href="your URL";</script>');

oder:

return res.redirect("your url");
1
BittuS

@Nazar Medeiros - Ihre Lösung verwendet einen Pass mit Express. Ich benutze keinen Pass, nur express-jwt. Ich kann etwas falsch machen, aber wenn sich ein Benutzer anmeldet, muss das Token auf die Clientseite zurückkehren. Nach dem, was ich bisher gefunden habe, bedeutet dies, dass wir einen Json mit dem Token zurückgeben müssen und daher keine Weiterleitung anrufen können. Gibt es etwas, was ich dort vermisse? 

Um dies zu umgehen, gebe ich einfach das Token zurück, speichere es in meinen Cookies und mache dann eine Ajax GET-Anfrage (mit dem gültigen Token). Wenn dieser Ajax-Aufruf zurückgegeben wird, ersetze ich die HTML-Datei des Körpers durch den zurückgegebenen HTML-Code. Dies ist wahrscheinlich nicht der richtige Weg, aber ich kann keinen besseren Weg finden. Hier ist mein JQuery-JavaScript-Code.

function loginUser(){
  $.post("/users/login", {
    username: $( '#login_input_username' ).val(),
   password: $( '#login_input_password' ).val()
 }).done(function(res){
    document.cookie = "token = " + res.token;
    redirectToHome();
  })
}

function redirectToHome(){
  var settings = {
    "async": true,
    "crossDomain": true,
    "url": "/home",
    "type": "GET",
    "headers": {
      "authorization": "Bearer " + getCookie('token'),
      "cache-control": "no-cache"
    }
  }

  $.ajax(settings).done(function (response) {
    $('body').replaceWith(response);
  });
}

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
1
ajpieri

Die If-Anweisung muss zum Umleiten in ein .get oder ein .post-Element eingeschlossen werden. Sowie 

app.post('/login', function(req, res) {
});

oder

app.get('/login', function(req, res) {
});
1
jmona789