web-dev-qa-db-fra.com

Comment savoir si l'utilisateur est connecté avec passport.js?

Cela fait deux jours que je lis les informations et les échantillons de passport.js info, mais je ne suis pas sûr d’avoir fait tout le processus d’authentification. 

Comment savoir si je suis connecté, par exemple, une barre de navigation avec un bouton de connexion ou de déconnexion, existe-t-il une variable comme le code ci-dessous?

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

Si l'utilisateur est connecté, passport.js créera un objet user dans req pour chaque requête dans express.js, dont vous pourrez vérifier l'existence dans n'importe quel middleware:

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

Vous pouvez créer un middleware express.js simple pour cela, qui vérifiera si l'utilisateur est connecté, et si ce n'est pas le cas - va rediriger vers la page /login:

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

Et utilisez-le:

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

Si vous souhaitez l'utiliser dans vos modèles car votre exemple de code semble indiquer que vous pouvez créer un middleware tel que celui-ci:

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

Placez ce code quelque part après avoir configuré votre passeport.

Et ensuite, utilisez-le dans votre modèle (exemple swig)

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

Je cherchais une telle solution et suis tombé sur cette page. La question est de savoir comment vérifier l’état de la connexion côté client.

Après la connexion, je cache le bouton de connexion et affiche le bouton de déconnexion. Lors de l'actualisation de la page, je vois à nouveau le bouton de connexion au lieu du bouton de déconnexion. La seule solution consiste à enregistrer un élément dans sessionStorage si vous utilisez une session (et localStorage si vous utilisez JWT). Supprimez cet élément lorsque vous vous déconnectez . Ensuite, à chaque chargement de page, vérifiez cet élément sessionStorage et procédez en conséquence.

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

utilisez le code ci-dessous dans app.get () ou 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