使用Codeigniter授权+ CSRF + uLogin错误

时间:2012-12-18 06:33:06

标签: codeigniter authorization csrf

为Codeigniter设置授权模块uLogin   http://ulogin.ru/constructor.html

但是,如果启用CSRF保护,则会导致错误("The action you have requested is not allowed.")。

如果保护功能关闭,一切正常。

如果启用了保护,则在记录并自动刷新后,当前页面将失败。

显然,由于差异通过了令牌。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

CodeIgniter CSRF的设置可能会导致您的问题。在/config/config.php中,设置$config['csrf_expire']确定CSRF cookie有多长时间。例如,如果该设置为300(5分钟),并且您刷新了登录页面但未尝试登录10分钟,则会收到错误"The action you have requested is not allowed.",因为CSRF cookie已过期5分钟前。

基本上,该错误可能来自CodeIgniter CSRF cookie过期。加载页面时会设置该Cookie,因此如果页面中的表单位于$config['csrf_expire']设置的时间以上,则必须在提交表单之前刷新页面,否则您将收到该错误。为避免经常出现错误,请尝试增加$config['csrf_expire']的大小。

此外,如果您使用CodeIgniter form helper,将自动生成隐藏的CSRF输入。

答案 1 :(得分:0)

我不熟悉链接的“模块”,但您需要在登录表单中添加一个隐藏字段,其中包含CSRF验证数据,如下所示:

<input type="hidden"
    name="<?=$this->security->get_csrf_token_name();?>"
    value="<?=$this->security->get_csrf_hash();?>"
/>