整个网站要求用户在查看页面之前登录。如果用户未登录,则会将其重定向到登录/注册页面。
问题:如果未登录的用户在http://www.domain.com/listings/1234
等网址中输入类型,则会显示该页面,但会显示一个黑暗的页面,阻止用户与之交互页面(jQuery的东西,这里不是问题),以及一个弹出模式框,其中包含指向(Tank Auth)登录页面http://www.domain.com/login
的链接。
从登录页面登录后,用户将被重定向回登录后获得的常用页面,即:http://www.domain.com
但该页面将传递变量1234
。
简而言之:我希望未登录且已进入http://www.domain.com/listings/1234
网站的用户 NOT 重定向到http://www.domain.com/login
尚未,而是保留在http://www.domain.com/listings/1234
上,并显示一个模式框,其中包含指向登录页面http://www.domain.com/login
的链接,如果他登录,则会将其重定向回{{ 1}}而不是登录后获得的常用页面,并传递变量http://www.domain.com/
。
如何使用Codeigniter完成此操作?
这就是我现在所拥有的:
列出控制器
1234
答案 0 :(得分:2)
有几种方法可以完成您的问题。希望这个解决方案能够提供一些如何实现这一目标的想法。
下面的解决方案使用jquery ui对话框显示模态和jquery .ajax 来处理登录表单提交。
如果用户未登录,请有条件地将此代码放在</body>
标记之前的页面底部。
<?php if($this->auth->tank_auth->is_logged_in()){ ?>
<div id="dialog-wrap" class="modal" >
<?php echo $this->load->view('login_form'); ?>
</div>
<script>
$('#dialog-wrap').modal({
modal: true,
autoOpen: true,
});
$('#login-form').submit(function(){
//use .ajax to submit login form and check credentials.
$.ajax({
type: 'POST',
url: <?php echo base_url(); ?>"login.php",
data: "username="+$('username').val()+'&password='+$('password').val(),
dataType: 'json',
success: function(returnData){.
if(returnData.status){
//close modal box
}else {
//display message that login failed.
}
}
});
});
</script>
?>
您的ajax登录控制器
function login(){
//Use tank auth to validate login information.
if(authentication is successful) {
$return_data = array(
'status' => true,
'msg' => 'Login Successful'
);
}else {
$return_data = array(
'status' => false,
'msg' => 'Login failed'
);
}
//Use echo instead of return when you are sending data back to an jquery ajax function.
echo json_encode($data);
}
如果您这样做,那么您将不必依赖于codeigniter重定向,所有内容都将通过ajax处理。
我希望这可以让你了解如何处理这个问题。