整个网站需要用户登录才能查看页面。如果用户未登录,他将被重定向到登录/注册页面。
问题:当未登录的用户输入 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
网站的用户 < em>尚未被重定向到http://www.domain.com/login
尚未,而是保留在http://www。 domain.com/listings/1234
并显示一个模式框,其中包含登录页面 http://www.domain.com/login
的链接,如果他登录,他将被重定向回 http://www.domain.com/
,而不是登录后获得的通常页面,并传递变量 1234
。
如何使用 Codeigniter 来完成此操作?
这就是我现在拥有的:
列表 Controller
function index(listing_id) {
$this->load->module('auth');
if(!$this->auth->tank_auth->is_logged_in()) {
redirect('login');
}
// Some calls to database etc here...
$this->load->view('listings', $data);
}
最佳答案
有多种方法可以解决您的问题。希望这个解决方案能够提供一些关于如何实现这一目标的想法。
下面的解决方案使用 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登录 Controller
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 处理。
我希望这能让您了解如何处理这个问题。
关于php - 登录后重定向到原始页面(Codeigniter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8625556/