Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果用户不是';你没有登录吗?_Javascript_Express_Passport.js_Ejs - Fatal编程技术网

Javascript 如果用户不是';你没有登录吗?

Javascript 如果用户不是';你没有登录吗?,javascript,express,passport.js,ejs,Javascript,Express,Passport.js,Ejs,我正在尝试在用户未登录时进行模式激活,并尝试为授权用户单击某些内容 在服务器端,我知道如果我想检查我是否经过身份验证,我只需写:if(req.isAuthenticated())和res.render页面。然而,在我的例子中,我只想触发一个模式,提示用户登录。所以我需要在客户端做这件事。那么我如何从客户端做到这一点呢?下面是我提出的代码,但isAuthenticated变量似乎不是答案 HTML: <a id="chkLog"><button class=" btn btn-s

我正在尝试在用户未登录时进行模式激活,并尝试为授权用户单击某些内容

在服务器端,我知道如果我想检查我是否经过身份验证,我只需写:
if(req.isAuthenticated())
和res.render页面。然而,在我的例子中,我只想触发一个模式,提示用户登录。所以我需要在客户端做这件事。那么我如何从客户端做到这一点呢?下面是我提出的代码,但isAuthenticated变量似乎不是答案

HTML:

<a id="chkLog"><button class=" btn btn-success mr-2 frftr-grn" id="navbtn">Add</button></a> 
$(function () {
  $('#chkLog').click(function () {
      if (isAuthenticated) {
        window.location.href = "/add";
      }
      else {
        $('#chkLog').modal("show");
      }

  });
});

  <%if(logStatus){%>
    <script>
     $('#chkLog').click(function () { 
      window.location.href = "/add"; 
     }); 
    </script>
  <%}else{%>
    <script>
    $('#chkLog').click(function () {
       $('#myModal').modal("show");
    }); 
    </script>
  <% }; %>
在服务器端,我有以下代码:

app.get("/add", (req, res) => {
  if(req.isAuthenticated()){
    res.render("add");
  }else{
    res.render("/")
  }  
});


据我所知,我不能为服务器端提示模式。当然,我必须为服务器端的get请求添加一个href。因此,我得出的结论是,我要么必须找到从服务器端加载模式的方法,要么尝试从客户端检查用户是否登录

在渲染时检查身份验证。i、 e.当用户未通过身份验证时,呈现
href=#
onClick=modalHandler
以及当用户通过身份验证时,显示正常链接并移除onClick处理程序。 在您的示例中,当对用户进行身份验证时,代码将如下所示

$(function () {
    $('#addBtn').click(function () {
        window.location.href = "/add";
    });
});
当用户未通过身份验证时,您的代码应该如下所示

$(function () {
    $('#addBtn').click(function () {
        $('#myModal').modal("show");
    });
});

生成代码的逻辑必须在
ejs
模板中实现。当您点击按钮时,点击事件将在浏览器上处理,因此显示模式的代码必须在客户端而不是服务器端写入。

为了根据用户是否经过身份验证触发客户端if-else语句,您希望在应用程序中准备好isAuthenticated if/else语句。请为呈现的页面使用布尔值。从客户端使用ejs创建客户端脚本

服务器端:

<a id="chkLog"><button class=" btn btn-success mr-2 frftr-grn" id="navbtn">Add</button></a> 
$(function () {
  $('#chkLog').click(function () {
      if (isAuthenticated) {
        window.location.href = "/add";
      }
      else {
        $('#chkLog').modal("show");
      }

  });
});

  <%if(logStatus){%>
    <script>
     $('#chkLog').click(function () { 
      window.location.href = "/add"; 
     }); 
    </script>
  <%}else{%>
    <script>
    $('#chkLog').click(function () {
       $('#myModal').modal("show");
    }); 
    </script>
  <% }; %>
客户端EJS:

<a id="chkLog"><button class=" btn btn-success mr-2 frftr-grn" id="navbtn">Add</button></a> 
$(function () {
  $('#chkLog').click(function () {
      if (isAuthenticated) {
        window.location.href = "/add";
      }
      else {
        $('#chkLog').modal("show");
      }

  });
});

  <%if(logStatus){%>
    <script>
     $('#chkLog').click(function () { 
      window.location.href = "/add"; 
     }); 
    </script>
  <%}else{%>
    <script>
    $('#chkLog').click(function () {
       $('#myModal').modal("show");
    }); 
    </script>
  <% }; %>

$('#chkLog')。单击(函数(){
window.location.href=“/add”;
}); 
$('#chkLog')。单击(函数(){
$('myModal').modal(“show”);
}); 

是,但是如何检查用户是否在客户端进行了身份验证?这就是我的问题所在。对不起,我没有把那部分讲清楚(如果(未经验证)在客户端不起作用。在服务器上执行,同时呈现模板。我假设您正在使用ejs。好的,我确实在服务器端处理了该部分,但如何从服务器端触发模式?老实说,我没有看到您所描述的全部内容。抱歉。我将进一步编辑我的初始帖子以了解更多详细信息。@VI11age_ID10T我已经更新了答案,看看这对您是否有意义。是的,在if-else块中