我想显示一个登录弹出窗口,当用户单击任何需要用户登录的按钮/链接时,由 JS 处理的覆盖。例如:如果用户尝试在未登录的情况下发表评论,则单击帖子时我必须显示这个弹出窗口。
这不是 ajax 调用,我可以根据服务器响应显示弹出窗口。
有没有办法做到这一点?也许通过检查状态码或类似的东西?
挑战是,当用户登录时,特定操作会将用户带到另一个页面,但是当用户未登录时,我想禁止此操作,而是在同一页面中显示登录弹出窗口。
我想显示一个登录弹出窗口,当用户单击任何需要用户登录的按钮/链接时,由 JS 处理的覆盖。例如:如果用户尝试在未登录的情况下发表评论,则单击帖子时我必须显示这个弹出窗口。
这不是 ajax 调用,我可以根据服务器响应显示弹出窗口。
有没有办法做到这一点?也许通过检查状态码或类似的东西?
挑战是,当用户登录时,特定操作会将用户带到另一个页面,但是当用户未登录时,我想禁止此操作,而是在同一页面中显示登录弹出窗口。
小心,即使在 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>
}
});
});
希望有帮助!
最简单的方法是在需要登录的页面上重定向,您可以使用$this->response->redirect('auth/login');
如果您真的坚持使用 js 弹出窗口,您要么必须使用 AJAX,要么可以在视图中编写以下内容:
<script language="javascript">
var loggedIn = <?= Auth::instance()->logged_in() ? "true" : "false" ?>
</script>
如果用户在重定向之前登录,您必须检查每个操作。这种方法的另一个问题是它不处理会话超时。