相关疑难解决方法(0)

设计用户sign_in为CSRF令牌真实性令牌提供身份验证错误

我正在使用devise(最新版本 - 3.2.0)rails(最新版本 - 4.0.1)

我正在进行简单的身份验证(没有ajax或api)并且收到CSRF真实性令牌的错误.检查下面的POST请求

started POST "/users/sign_in" for 127.0.0.1 at 2013-11-08 19:48:49 +0530
Processing by Devise::SessionsController#create as HTML

 Parameters: {"utf8"=>"?",    
 "authenticity_token"=>"SJnGhXXUXjncnPhCdg3muV2GYCA8CX2LVFV78pqddD4=", "user"=> 
{"email"=>"a@a.com", "password"=>"[FILTERED]", "remember_me"=>"0"},
"commit"=>"Sign in"}

Can't verify CSRF token authenticity
 User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."email" =  
'a@a.com' LIMIT 1
(0.1ms)  begin transaction
SQL (0.4ms)  UPDATE "users" SET "last_sign_in_at" = ?, "current_sign_in_at" = ?,
"sign_in_count" = ?, "updated_at" = ? WHERE "users"."id" = 2  [["last_sign_in_at", Fri,
08 Nov 2013 …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails csrf devise rails-api ruby-on-rails-4

19
推荐指数
3
解决办法
1万
查看次数

在Rails 4中优雅地处理InvalidAuthenticityToken异常

我刚刚将一个应用程序从Rails 3升级到Rails 4,我看到一堆InvalidAuthenticityToken异常弹出.挖掘它看起来我们的用户在我们的网站上打开多个长期标签是相当普遍的.所以我认为发生的事情是这样的:用户Alice有三个标签打开,她的会话到期.她重新登录其中一个选项卡,这会更新存储在其会话中的真实性令牌.然后她返回到其他一个打开的选项卡并尝试提交数据,但她从我们引发的InvalidAuthenticityToken错误中得到500错误.

为Alice做一些错误处理显然很好,所以她没有得到500错误.我想知道这种情况的最佳做法.从过期的标签处理Alice的提交有什么好方法?我不想让当前会话到期,因为从用户的角度来看这会非常烦人("我登录,你笨蛋!").理想情况下,我只是希望用户重新加载页面,这将导致表单中存在正确的真实性令牌.或者我应该做一些不同的事情,以便打开的长期标签注意到会话已过期并强制重新加载?从用户的角度来看,这可能是次优的,因为他们喜欢准备好该页面并且可以轻松访问以保持引用,这就是为什么他们首先在选项卡中将其打开.

session ruby-on-rails ruby-on-rails-4

15
推荐指数
3
解决办法
3386
查看次数