如果用户未登录,我试图激活模式,并尝试为授权用户单击某些内容。
在服务器端,我知道是否要检查是否已通过身份验证,我只需编写:if(req.isAuthenticated())
并重新渲染页面即可。但是,就我而言,我只是想触发一个模式,提示用户登录。因此,我需要在客户端执行此操作。那么如何从客户端执行此操作?下面是我想出的代码,但isAuthenticated变量似乎不是答案。
HTML:
<a id="chkLog"><button class=" btn btn-success mr-2 frftr-grn" id="navbtn">Add</button></a>
client.js(不起作用):
$(function () {
$('#chkLog').click(function () {
if (isAuthenticated) {
window.location.href = "/add";
}
else {
$('#chkLog').modal("show");
}
});
});
在服务器端,我有以下代码:
app.get("/add", (req, res) => {
if(req.isAuthenticated()){
res.render("add");
}else{
res.render("/")
}
});
据我所知,我无法提示服务器端的模式。我必须为服务器端的get请求添加一个href。因此,我可以得出结论,我要么必须找到一种从服务器端加载模式的方法,要么尝试从客户端检查用户是否已登录。
答案 0 :(得分:1)
在渲染本身时检查身份验证。即,当用户未通过身份验证时,呈现href=#
和onClick=modalHandler
,并且当用户通过身份验证时,显示正常链接并删除onClick处理程序。
在您的示例中,当用户通过身份验证后,代码将看起来像这样。
$(function () {
$('#addBtn').click(function () {
window.location.href = "/add";
});
});
,当用户未通过身份验证时,您的代码应如下所示。
$(function () {
$('#addBtn').click(function () {
$('#myModal').modal("show");
});
});
必须在ejs
模板中实现生成代码的逻辑。当您单击按钮时,单击事件将在浏览器上处理,因此显示模式的代码必须在客户端而不是服务器端编写。
答案 1 :(得分:0)
为了基于用户是否通过身份验证来触发if else语句客户端,您希望在app.get中准备好isAuthenticated if / else语句以及呈现页面的布尔值。从客户端使用ejs创建客户端脚本。
服务器端:
app.get("/", (req, res) => {
if(req.isAuthenticated()){
res.render("home",{logStatus:true});
});
}else{
res.render("home",{logStatus:false});
});
}
});
客户端EJS:
<%if(logStatus){%>
<script>
$('#chkLog').click(function () {
window.location.href = "/add";
});
</script>
<%}else{%>
<script>
$('#chkLog').click(function () {
$('#myModal').modal("show");
});
</script>
<% }; %>