- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对为用户登录运行集成测试时遇到的错误感到有点困惑。以下是跟踪的前几行:
invalid hash
@ /home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/bcrypt-ruby-3.0.1/lib/bcrypt.rb:171:in `initialize'
/home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.6/lib/active_model/secure_password.rb:58:in `new'
/home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.6/lib/active_model/secure_password.rb:58:in `authenticate'
/home/benjamin/projects/LTClone/app/controllers/sessions_controller.rb:9:in `create'
所以错误来自 create
操作中的这一行:
if user && user.authenticate(params[:session][:password])
调用 secure_password.rb
中定义的 authenticate
方法:
def authenticate(unencrypted_password)
if BCrypt::Password.new(password_digest) == unencrypted_password
...
调用 BCrypt::Password.new
方法,定义在 bcrypt.rb
中:
def initialize(raw_hash)
if valid_hash?(raw_hash)
...
else
raise Errors::InvalidHash.new("invalid hash") # line 171
end
end
所以出于某种原因,raw_hash
与 valid_hash?
指定的正则表达式不匹配,这意味着 password_digest
变量不是一个有效哈希。基于this answer ,似乎我要验证的用户有一个空白或无效的 password_digest
,但在我调用测试中的 create
操作之前,我可以 输入@user.password_digest
,然后打印散列(Rubular 表示 valid_hash?
正则表达式匹配它)。我还将创建方法更改为
if user && user.password_digest && user.authenticate(params[:session][:password])
只是为了确保它确实存在。
所以现在我完全被难住了。看起来我有一个有效的 password_digest
,但是 BCrypt::Password.new
拒绝承认它。有人知道为什么吗?
最佳答案
检查您的用户“password_digest”列。如果它是“nil”那么你会得到这个错误。建议简单地删除所有用户并确保正确创建用户。
关于ruby-on-rails - 为什么我的 password_digest 返回 "invalid hash"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906432/
我正在使用一个 Web 服务,它在 soap 请求的 header 中需要 wsse 安全性,并且由创建的、随机数和密码摘要组成。 Web 服务器使用这些值来授权真正的请求。 密码摘要是使用网络服务
晚上好。我有个问题。我正在使用 has_secure_password并且导致我有一个错误 undefined methodpassword_digest=' for #`, 但是我没有这个方法!!请
我是Rails的新手,已经看到了我所有问题的所有可能答案,因为其他开发人员经常问这个问题,但我无法解决它。请看一看。 当我尝试从控制台添加数据时出现此错误 User.create(name: "Mic
我目前正在阅读 Michael Hartl 的书(Ruby on Rails 教程第 3 版),他使用 password_digest 和他的身份验证模型,我查看了 Pragmatic Studio
我尝试按照http://bcardarella.com/post/4668842452/exploring-rails-3-1-activemodel-securepassword使用rails 3.
除了以下内容,我已经对模型中的所有内容进行了注释: has_secure_password 在我的迁移中,我添加了: t.string "password_digest" 到我的用户数据库。 当我在
您好,我正在使用我的 Rails 应用程序访问具有无法更改的数据库的现有项目。所以我的问题是如何使用 Bcrypt 创建 session 无需列 password_digest在我的数据库中?,我已经
在 Controller 中: def createUserForHotel @user=User.new(params_createUserForHotel) if @user.save
我想要两层身份验证 - 我将它们称为“硬”和“软”身份验证。硬层是标准的电子邮件和密码层。我目前使用 has_secure_password 实现了这个和 bcrypt-ruby gem如本 Rail
我对为用户登录运行集成测试时遇到的错误感到有点困惑。以下是跟踪的前几行: invalid hash @ /home/benjamin/.rvm/gems/ruby-1.9.3-p194/gem
从 has_secure_password 迁移到 devise 会导致在与用户对象交互时控制台出现以下错误: .rvm/gems/ruby-2.4.1/gems/devise-4.4.0/lib/d
我有以下文件来更新用户详细信息。他们目前适用于除密码以外的所有内容。所有逻辑都正常工作,我已经使用 puts 检查是否输入了正确的逻辑部分,但是当 @user.update( user_params)
如果您还没有看过,请查看最新的 railscast authentication in rails 3.1 。他在生成模型时使用 password_digest:string 并将 has_secre
我看过很多关于这个错误的帖子,但我仍然很难过。 编辑:https://anthonyroberts.herokuapp.com/signup Michael Hartl 的教程,第 7 章的结尾,您有
我是一名优秀的程序员,十分优秀!