Как узнать, зарегистрирован ли пользователь в файле passport.js?

Я читал passport.js информацию и образцы в течение двух дней, но я не уверен, после этого я сделал весь процесс аутентификации.

Как я узнаю, что я вошел в систему, например, у меня будет панель навигации с кнопкой входа или выхода из системы, есть ли какая-то переменная, например, код ниже?

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

Ответ 1

Если пользователь вошел в систему, passport.js создаст объект user в req для каждого запроса в express.js, который вы можете проверить на наличие в любом промежуточном программном обеспечении:

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

Для этого вы можете создать простую промежуточную программу express.js, которая будет проверять, зарегистрирован ли пользователь, а если нет - перенаправляется на страницу /login:

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

И используйте его:

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

Ответ 2

Если вы хотите использовать его в своих шаблонах, так как ваш пример кода указывает, что вы можете создать некоторое промежуточное программное обеспечение, например следующее:

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

Поместите этот код где-нибудь после установки паспорта.

И затем используйте его в своем шаблоне (пример swig)

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

Ответ 3

Я искал такое решение и наткнулся на эту страницу. Вопрос в том, как проверить статус входа на клиентской стороне.

После входа я скрываю кнопку входа и показываю кнопку выхода. При обновлении страницы я снова вижу кнопку входа вместо кнопки выхода. Единственное решение - сохранить элемент в sessionStorage, если вы используете session (и localStorage, если вы используете JWT). Удалите этот элемент при выходе. Затем на каждой странице загрузки проверьте этот элемент sessionStorage и сделайте соответственно.

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'); };
}; 

Ответ 4

используйте код ниже в app.get() или router.get()

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

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