您好我一直在使用tank auth for CI,我认为它很棒,我只是想知道是否有办法改变它,所以当用户刷新登录页面时(登录错误后),'确认表单重新提交'弹出窗口没有出现。我一直在阅读post redirect get方法,但我不想搞砸坦克auth。 ps - 即时通讯
答案 0 :(得分:0)
此“确认表格重新提交”来自您的网络浏览器,而不是来自Tank Auth。 前段时间,编网浏览器的人意识到重新发布是一个很大的问题,所以他们会发出警告,要求停止ppl双重发布等等。
我可以想出两种方法来避免它。
1)将登录'post'改为'get'。 这是一个坏主意。您的密码在查询字符串中
2)在auth控制器中,在登录失败时重定向到登录表单的错误显示版本,而不是再次加载登录表单视图。
基本上你找到了一种通过查询字符串或会话将错误消息传递给登录表单的方法。重定向到该页面。它非常容易,因为坦克auth使用语言键来解决错误。
我只是尝试将其作为查询字符串..似乎工作正常,但我的坦克身份验证相当严重。
我在controllers/auth.php
//fail
添加了此内容
redirect('auth/login/'.$errors['login']);
这将获取tank auth生成的登录错误密钥,并将其作为查询参数传递回http://yoursite/auth/login
。
然后在登录功能的顶部我把它:
function login($error = ''){
if ($error != '') {
$data['errors']['login'] = $this->lang->line($error);
$this->load->view('auth/login_form', $data);
}
此代码抓取参数,如果它在那里..然后从您的语言文件中获取相应的行,然后加载登录表单。
请注意,这只会处理“登录”错误。您需要传递更多查询参数来处理验证错误等事项。
//编辑 我以为我会尝试会议的方式..而且它更整洁。
这是//fail
点
$this->session->set_flashdata('login_error', $this->lang->line($errors['login']));
redirect('/auth/login');
之类的内容在views / auth / login_form.php中,而不是form_errors所在的位置。
<? if ( $this->session->flashdata('login_error') != '') {
echo '<p style="color:#f00;">'.$this->session->flashdata('login_error').'</p>';
} ?>