0

我想显示一个登录弹出窗口,当用户单击任何需要用户登录的按钮/链接时,由 JS 处理的覆盖。例如:如果用户尝试在未登录的情况下发表评论,则单击帖子时我必须显示这个弹出窗口。

这不是 ajax 调用,我可以根据服务器响应显示弹出窗口。

有没有办法做到这一点?也许通过检查状态码或类似的东西?

挑战是,当用户登录时,特定操作会将用户带到另一个页面,但是当用户未登录时,我想禁止此操作,而是在同一页面中显示登录弹出窗口。

4

2 回答 2

2

小心,即使在 chrome 中,您也可以直接编辑 javascript,只需右键单击页面 > 检查元素 > 资源 > javascript,然后输入您的更改,绕过您的检查。请记住,您使用它只是为了增加用户体验,但请确保您的 php 或任何服务器端脚本检查有效会话。

因此,假设您正在处理这个问题,如果您向按钮/链接添加一个类,如下所示:

<a href="go_to_post.php" class="requires_login">Post Comment</a>
<form><input type="submit" class="requires_login" value="Post Comment" /></form>

例如,您可以使用 javascript 或 jquery:

$(document).ready(function(){
  var valid_session='<?php echo (isset($_SESSION['id']) ? 'true':'false'); ?>';
  $('.requires_login').on('click',function(event){
    if (valid_session=='false'){
      event.preventDefault();
      alert('open popup instead');
      //for instancce, $('#my_popup').show(); if you have:
      //<div id="my_popup">You must be logged in first!</div>
    }
  });
});

希望有帮助!

于 2012-10-23T11:49:29.443 回答
1

最简单的方法是在需要登录的页面上重定向,您可以使用$this->response->redirect('auth/login');

如果您真的坚持使用 js 弹出窗口,您要么必须使用 AJAX,要么可以在视图中编写以下内容:

<script language="javascript">
var loggedIn = <?= Auth::instance()->logged_in() ? "true" : "false" ?>
</script>

如果用户在重定向之前登录,您必须检查每个操作。这种方法的另一个问题是它不处理会话超时。

于 2012-10-23T11:53:19.030 回答