如果用户未登录,如何运行模式?

时间:2019-11-02 03:20:09

标签: javascript express passport.js ejs

如果用户未登录,我试图激活模式,并尝试为授权用户单击某些内容。

在服务器端,我知道是否要检查是否已通过身份验证,我只需编写: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。因此,我可以得出结论,我要么必须找到一种从服务器端加载模式的方法,要么尝试从客户端检查用户是否已登录。

2 个答案:

答案 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>
  <% }; %>
相关问题