嗨,我一直在为 CI 使用 tank auth,我认为它很棒,我只是想知道是否有办法改变它,所以当用户刷新登录页面(登录错误后)时,“确认表单重新提交”弹出窗口不会出现。我一直在阅读帖子重定向获取方法,但我不想搞砸坦克身份验证。ps - 我很菜鸟
1 回答
此“确认表格重新提交”来自您的网络浏览器,而不是来自 Tank Auth。前段时间,有人在编写网络浏览器时意识到转发是一个大问题,因此他们发出警告以停止 ppl 重复发布等。
我可以想到两种方法来避免它。
1)将登录“post”变成“get”。这是一个坏主意。因为您的密码在查询字符串中
2) 在 auth 控制器中重定向到登录失败时登录表单的错误显示版本,而不是再次加载登录表单视图。
基本上,您找到了一种通过查询字符串或会话将错误消息传递给您的登录表单的方法。重定向到该页面。它非常简单,因为 tank auth 使用语言键来检测错误。
我只是尝试将其作为查询字符串.. 似乎工作正常,但我的坦克身份验证经过大量修改。
我controllers/auth.php
在它说的部分之后添加了这个//fail
redirect('auth/login/'.$errors['login']);
http://yoursite/auth/login
这将获取由 tank auth 生成的登录错误密钥并将其作为查询参数传递回。
然后在登录功能的顶部我放了这个:
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>';
} ?>