wake-up-neo.com

Wie können Sie feststellen, ob der Benutzer mit passport.js angemeldet ist?

Ich habe passport.js-Informationen und -Beispiele seit zwei Tagen gelesen, bin aber nicht sicher, ob ich den gesamten Authentifizierungsprozess durchgeführt habe. 

Woher weiß ich, ob ich angemeldet bin? Ich habe beispielsweise eine Navigationsleiste mit einer Schaltfläche zum Anmelden oder Abmelden. Gibt es eine Variable wie Code unten?

if (login)
   <button>logout</button>
else 
   <button>login</button>
88
RMontes13

Wenn der Benutzer angemeldet ist, erstellt passport.js für jede Anforderung in express.js ein user-Objekt in req, das Sie in jeder Middleware auf Existenz prüfen können:

if (req.user) {
    // logged in
} else {
    // not logged in
}

Sie können eine einfache express.js-Middleware erstellen, die prüft, ob der Benutzer angemeldet ist, und falls nicht, wird auf die /login-Seite umgeleitet:

function loggedIn(req, res, next) {
    if (req.user) {
        next();
    } else {
        res.redirect('/login');
    }
}

Und benutze es:

app.get('/orders', loggedIn, function(req, res, next) {
    // req.user - will exist
    // load user orders and render them
});
183
moka

Wenn Sie es in Ihren Vorlagen verwenden möchten, da Ihr Codebeispiel darauf hindeutet, können Sie einige Middleware wie diese erstellen:

app.use(function (req, res, next) {
  res.locals.login = req.isAuthenticated();
  next();
});

Platzieren Sie diesen Code irgendwo, nachdem Sie Ihren Pass eingerichtet haben.

Und dann verwenden Sie es in Ihrer Vorlage (swig-Beispiel)

{% if login %}
<button>logout</button>
{% else %} 
<button>login</button>
{% endif %}
40
cyberwombat

Ich habe nach einer solchen Lösung gesucht und bin auf diese Seite gestoßen. Die Frage ist, wie Sie den Anmeldestatus auf der Clientseite prüfen können.

Nach dem Einloggen blende ich den Login Button aus und zeige den Logout Button. Bei der Seitenaktualisierung sehe ich wieder die Anmeldeschaltfläche anstelle der Abmeldeschaltfläche. Die einzige Lösung besteht darin, ein Element in sessionStorage zu speichern, wenn Sie session (und localStorage, wenn Sie JWT verwenden) verwenden. Löschen Sie dieses Element, wenn Sie sich abmelden . Überprüfen Sie dann bei jedem Laden dieser Seite dieses sessionStorage-Element und führen Sie die entsprechenden Schritte aus.

if (sessionStorage.getItem('status')) {
    $("#btnlogout").show();
    $("#btnlogin").hide();
// or what ever you want to do
} else {
    $("#btnlogout").hide();
    $("#btnlogin").show();
}



function Login() {
            var data = {
                username: $("#myModal #usr").val(),
                password: $("#myModal #pw").val()

            };
            $.ajax({
                type: 'POST',
                url: '/login',
                contentType: 'application/JSON; charset=utf-8',
                data: JSON.stringify(data),
                success: funcSuccess,
                error: funcFail
            });
            function funcSuccess(res) {
                sessionStorage.setItem('status', 'loggedIn');

                $("#btnlogout").show();
                $("#btnlogin").hide();
            }
            function funcFail() { $("#pp").text('Login Failed'); };
        };

function Logout() {
    $.ajax({
        type: 'GET',
        url: '/logout',
        contentType: 'application/JSON; charset=utf-8',
        success: funcSuccess,
        error: funcFail,
    });
    function funcSuccess(res) {
        $("#btnlogout").hide();
        $("#btnlogin").show();
        sessionStorage.removeItem("status");
    };
    function funcFail() { alert('Login method Failed'); };
}; 
0
Zeni

benutze den folgenden Code in app.get () oder router.get ()

router.get('/edit/:id', (req, res)=>{
  if(req.isAuthenticated()){
     if(req.isAuthenticated()){
      //

      }
  else{
   res.redirect('/users/login');//your particular login routes
     }
});
0
Pankaj