Как узнать, зарегистрирован ли пользователь в файле 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
}
});