我有一个奇怪的问题,但找不到解决方案。我在CodeIgniter配置文件中激活了csrf。当我尝试登录时,第一次尝试总是失败。接下来的所有尝试均有效。它可以在我的本地MAMP上运行,但是当我在Web服务器上推送它时,我遇到了一个奇怪的问题。我得到的错误: 您请求的操作是不允许的。
我的配置。
$config['base_url'] = 'https://www.xy.de/test1/';
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();
我的观点:
<?= form_open('login/connect' , ' class="login-form" '); ?>
<div class="input-group mb-3">
<input required type="text" name="fUsername" class="form-control rounded-input" placeholder="<?= $this->lang->line('username_or_email_placeholder'); ?>" aria-label="Username" aria-describedby="basic-addon1">
</div>
<div class="input-group mb-3">
<input required type="password" name="fPassword" class="form-control rounded-input" placeholder="******" aria-label="password" aria-describedby="basic-addon1">
</div>
<div class="w-100 text-center">
<button class="loginButton" type="submit" name="fLogin"><span><?= $this->lang->line('login'); ?></span></button>
<a href="<?= base_url() ?>recover/request" id="forgotPassword"><?= $this->lang->line('forgot_password'); ?>?</a>
</div>
<?= form_close() ?>
控制器:
public function index()
{
if($this->LoginModel->isLoggedIn()){
if($this->LoginModel->isUserSuperAdmin($this->session->idUser)){
redirect("cms/dashboard");
}else {
redirect("cms/profile");
}
}else{
$this->load->view("cms/login", array("title" => SITE_TITLE . " - " . $this->lang->line("login")));
}
}
public function connect()
{
$login = trim($this->input->post("fUsername"));
$password = $this->input->post("fPassword");
if ($this->LoginModel->login($login, $password)) {
if ($this->LoginModel->isUserSuperAdmin($this->session->idUser)) {
redirect("cms/dashboard");
} else {
redirect("cms/profile");
}
}
redirect("cms");
}
答案 0 :(得分:0)
哈希正在重新生成,您应该使用提供的类,而不是静态的类。
尝试一下:
<input type="hidden" name="<?=$this->security->get_csrf_token_name();?>" value="<?=$this->security->get_csrf_hash();?>" />
答案 1 :(得分:0)
尝试像这样进行通话,不需要
insert
它会自动设置为表格 您的表单调用是:
<input type="hidden" name="csrf_test_name" value="60bcd04d35e8e0ce9508a474e9d704da">
您可以尝试使用它
<form action="https://www.xy.de/test1/login/connect" class="login-form" method="post" accept-charset="utf-8">
---------------------------
---------------------------
</form>
希望它能正常工作。我用它工作 谢谢