- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将devise
(最新版本-3.2.0)与rails
(最新版本-4.0.1)一起使用
我正在做简单的身份验证(没有ajax或api),并且CSRF身份验证 token 出现错误。检查下面的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 14:13:56 UTC +00:00], ["current_sign_in_at", Fri, 08 Nov 2013 14:18:49 UTC
+00:00], ["sign_in_count", 3], ["updated_at", Fri, 08 Nov 2013 14:18:49 UTC +00:00]]
(143.6ms) commit transaction
Redirected to http://localhost:3000/
Completed 302 Found in 239ms (ActiveRecord: 144.5ms | Search: 0.0ms)
home#new
,就像
class HomeController < ApplicationController
before_action :authenticate_user!
def index
end
end
<meta content="authenticity_token" name="csrf-param" />
<meta content="aV+d7Z55XBJF2VtyL8V3zupR3OwhaQ6UHNtlQLBQf5Y=" name="csrf-token" />
<form accept-charset="UTF-8" action="/users/sign_in" class="new_user" id="new_user"
method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" />
<input name="authenticity_token" type="hidden
value="aV+d7Z55XBJF2VtyL8V3zupR3OwhaQ6UHNtlQLBQf5Y=" />
</div>
<div><label for="user_email">Email</label><br />
<input autofocus="autofocus" id="user_email" name="user[email]" type="email" value="" />
</div>
<div><label for="user_password">Password</label><br />
<input id="user_password" name="user[password]" type="password" /></div>
<div><input name="user[remember_me]" type="hidden" value="0" />
<input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1" />
<label for="user_remember_me">Remember me</label></div>
<div><input name="commit" type="submit" value="Sign in" /></div>
</form>
last_sign_in_at
和
sign_in_count
值,但是当我尝试在 Controller 中访问
current_user
时,它就是
nil
。
user
。但是接下来的问题是:“为什么要更新
last_sign_in_at
表中的
sign_in_count
/
user
值?”
最佳答案
如果CSRF token 不正确,Rails将不会读取 session 或对其进行任何更新。它将仍然执行 Controller 指定的任何其他操作,这说明了为什么您看到数据库更新但最终没有登录。
我注意到您的日志和页面中的authenticity_token不匹配。我意识到这可能是因为您捕获了一个不同的请求,但是您应该检查页面上的请求是否与同一请求的日志中的请求相匹配。我还假设您在 View 中使用了正确的标记,该标记每次都会生成不同的authenticity_token,而不仅仅是硬编码HTML输入。
您是否发现与设计无关的表格存在相同的问题?否则,作为解决方法,您可以在 Controller 中使用以下代码来将操作从CSRF检查中排除:
protect_from_forgery except: :sign_in
关于ruby-on-rails - 设计用户sign_in给出CSRF token 真实性 token 的身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19861402/
我正在将我的标准 Rails 单元测试迁移到 RSpec,但我的设计有问题。所有包含设备身份验证的 Controller 都因 RSpec 失败。 我尝试按照设计教程在 RSpec 中登录管理员,但没
出于某种原因,我无法让设计辅助方法 sign_in 工作。 current_user 一直为空。知道问题出在哪里吗? 测试: before :each do @user = Factory
我如何明确调用 Devise sign_in?我的 Controller 中已经有一个名为 sign_in 的方法. 我试过 require 'devise/controllers/sign_in_o
我在 Rails 3 中设置了没有任何 gem 的 restful 身份验证和用户管理。 但是,我认为需要转到“/sessions/new”而不是“/sign_in”是很愚蠢的。 我知道您可以为整个资
Devise sign_in 方法应该接受 store: false 作为第二个参数,除非我在 RSpec 中并使用 Devise::TestHelpers. 当我从 sessions_control
我正在使用配置为使用 omniauth facebook 登录集成的设备。从我的 spec/request 测试中调用 sign_in 方法时,我得到: undefined method `env'
在我的应用程序中,我使用 Devise 进行身份验证。可以邀请用户通过以 token 作为参数的链接登录到应用。 链接看起来是e。 G。像这样: https://chaos-jadz.c9users.
在 Michael Hartl 的 Ruby on Rails 教程的第 9 章中,我遇到了 RSpec 测试的问题,因为他们看不到文件 utilities.rb 中定义的我的 sign_in 方法。
生命体征: ruby 1.9.3p194(2012-04-20 修订版 35410) [i686-linux] Rails 3.2.7 设计 2.1.2 GET/users/sign_in 试图重定向
我们使用 rails、devise 和 omniauth 通过 facebook 进行注册和登录。我们托管在 Heroku 上,运行两个 Web dyno。 有时使用 facebook 登录失败。我们
我正在尝试使用Devise辅助方法登录和注销在Rails中编写Rspec测试。 sign_in方法不起作用。但是,在对应用程序进行大量更改之前,它可以更早地工作。 我尝试过的事情: 我将测试助手包括在
devise_for :admins, path: 'admins' devise_scope :admin do root to: "devise/sessions#new" end http:
devise_for :admins, path: 'admins' devise_scope :admin do root to: "devise/sessions#new" end http:
我的项目使用 Unity 2017.2,Android 使用 Google Play SDK 登录。 如果我没记错的话,对于测试版本它工作正常,但是当我们开始发布服务并关闭 alpha 和 beta
当我尝试使用 sign_in 或 sign_in_with_redirect 时,我得到的参数数量错误(1 对 0)。 我们使用的是 rails 4.2、ruby 2.2.0、devise 3.4.1
我已按照以下说明进行操作: Devise wiki关于使用 RSpec 设置 Controller 测试,但我的测试失败了。 它没有呈现页面,而是重定向到 http://test.host 以下是响应
我正在尝试使用 RSpec 编写功能测试来测试我的登录表单,但我总是得到以下信息: 1) the signin process signs me in Failure/Error: vi
我有一个 Devise模型(用户)。当我使用有效 Email 登录时和 password .然后一切正常。但是当Email或 password输入错误,而不是重定向到 Devise带有设计默认错误的登
我已经完成了 Ruby on Rails Tutorial迈克尔·哈特尔。我知道一些关于实例变量、getter 和 setter 的基本概念。 登录方法是here def sign_in(user)
在 Rails 3.2 中使用 Devise 2.2.4。 当我未登录时,我转到 url myapp.com/documents,Devise 将我重定向到 myapp.com/users/sign_
我是一名优秀的程序员,十分优秀!