我已经阅读了两天的passport.js
信息和样本,但我不确定在那之后我做了所有的认证过程。
我如何知道我是否已登录,例如,我将有一个带有登录或注销按钮的导航栏,是否有一些变量如下面的代码所示?
if (login)
<button>logout</button>
else
<button>login</button>
发布于 2013-09-11 19:29:11
如果用户已登录,passport.js
将在req
中为express.js
中的每个请求创建user
对象,您可以检查该对象是否存在于任何中间件中:
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
});
发布于 2013-11-19 03:52:02
如果您想在您的模板中使用它,因为您的代码示例似乎表明您可以创建一些中间件,如下所示:
app.use(function (req, res, next) {
res.locals.login = req.isAuthenticated();
next();
});
在设置passport之后,将代码放在某个地方。
然后在你的模板中使用它(swig示例)
{% if login %}
<button>logout</button>
{% else %}
<button>login</button>
{% endif %}
发布于 2018-10-05 17:35:11
我正在寻找这样的解决方案,偶然发现了这个页面。问题是如何在客户端查看登录状态。
登录后,我隐藏登录按钮,并显示注销按钮。在页面刷新时,我再次看到登录按钮,而不是注销按钮。如果您使用的是session,则唯一的解决方案是将项目保存在sessionStorage中(如果您使用的是JWT,则保存为localStorage )。注销时删除此项目。然后,在每次加载页面时,检查此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'); };
};
https://stackoverflow.com/questions/18739725
复制相似问题