我有Rails 4.0.0应用程序.当我运行bundle install命令时没有问题.这是我的GemFile.
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
gem 'mysql2'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc2'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your …Run Code Online (Sandbox Code Playgroud) 当我学习"Ruby on Rails Tutorial"时,我想在控制台上创建一个User:
irb(main):001:0> User.create(name:"gsky",email:"k@q.com",
irb(main):002:1* password:"aaaaaa",password_confirmation:"aaaaaa")
Run Code Online (Sandbox Code Playgroud)
然后,我收到以下错误消息:
NoMethodError: undefined method cost' for BCrypt::Engine:Class
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activemodel-4.
0.2/lib/active_model/secure_password.rb:104:inpassword='
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activerecord-4
.0.2/lib/active_record/attribute_assignment.rb:42:in public_send'
Run Code Online (Sandbox Code Playgroud)
这是用户模型:
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
end
Run Code Online (Sandbox Code Playgroud) 我试图加入bcrypt-ruby,v.3.0.1.我在我的gem文件中输入gem,如下所示:
gem 'bcrypt-ruby', '3.0.1'
Run Code Online (Sandbox Code Playgroud)
然后我去终端并运行:
bundle install
Run Code Online (Sandbox Code Playgroud)
我收到以下回复:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby extconf.rb
creating Makefile
make
compiling bcrypt_ext.c
make: gcc-4.2: No such file or directory
make: *** [bcrypt_ext.o] Error 1
Gem files will remain installed in /Users/philip7899/.bundler/tmp/2186/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /Users/philip7899/.bundler/tmp/2186/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
An error occurred while installing bcrypt-ruby (3.0.1), and Bundler cannot continue.
Make sure that `gem install bcrypt-ruby -v '3.0.1'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)
我对Ruby和Rails都是新手,并且不知道如何解决这个问题.我已经看到其他stackoverflow页面有类似的问题,但没有一个能够帮助我.我最近升级到Mountain Lion,并被告知可能是一个问题.有人告诉我使用RVM卸载然后重新安装Ruby.我试过了,但没用.
请帮忙.谢谢.
我正在尝试使用门卫将oAuth2.0集成到我的rails-api应用程序中.但是我一直得到这个错误,"针对ApplicationController的未定义方法`helper_method",但却找不到如何解决它的明确解决方案.bellow是我的application_controller.rb类,它有helper_method.我正在按照以下链接的教程,任何帮助将不胜感激.
https://www.sitepoint.com/getting-started-with-doorkeeper-and-oauth-2-0/
class ApplicationController < ActionController::API
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
Run Code Online (Sandbox Code Playgroud) ruby-on-rails oauth-2.0 bcrypt-ruby doorkeeper ruby-on-rails-5
我有一个现有的Web应用程序,有几千个用户,我正在移植到Rails.当我重写和重构这个应用程序时,我可能需要在任意数量的不同服务器上运行它以进行开发,测试和生产.
我在我的用户模型中使用Rails的内置has_secure_password方法,但我担心密码数据的可移植性.我需要将数据库的内容从一台机器移动到另一台机器,以便在不同的环境中进行测试,并且非常重要的是我可以在每个环境中使用相同的用户和密码集测试用户身份验证功能.
到目前为止,很容易找到关于bcrypt-ruby如何与Rails一起工作的答案,has_secure_password但经过数周的搜索后,我还没有找到明确的答案.
如果has_secure_password将WorkFactor + Salt + HashedPassword中的结果连接并保存到password_digest数据库列,则可以重新生成该哈希,并在移动到任何其他计算机时可靠地进行比较(假设任何其他计算机在类Unix操作系统上运行Rails)?
或者换句话说 - 使用Rails的has_secure_password便携式生成的bcrypt-ruby密码?
后续问题:如果盐总是随机生成的(我看到相同的密码使用不同的哈希值,所以我不认为盐是从密码本身的文本创建的)那么Rails应用程序将如何能够可靠地在登录表单上重新提交密码提交,并将其与数据库中的内容进行比较.显然,为了比较它,它必须首先知道盐是什么.它是如何做到的?
在我的应用中,用户可以编辑他们的个人资料信息 在编辑配置文件表单上,用户可以更改所有字段(名称,标题等).在此同一形式的三个字段:current_password,password,和password_confirmation.我使用bcrypt的has_secure_password功能进行密码验证.我根本不使用Devise.
我希望用户只有在提供了正确的当前密码后才能更改密码.我之前在使用updateUsers控制器的方法中使用了以下代码:
# Check if the user tried changing his/her password and CANNOT be authenticated with the entered current password
if !the_params[:password].blank? && !@user.authenticate(the_params[:current_password])
# Add an error that states the user's current password is incorrect
@user.errors.add(:base, "Current password is incorrect.")
else
# Try to update the user
if @user.update_attributes(the_params)
# Notify the user that his/her profile was updated
flash.now[:success] = "Your changes have been saved"
end …Run Code Online (Sandbox Code Playgroud) 我正在尝试对一些帖子的评论使用简单的身份验证.
用户使用即时ID和密码键入注释
我用'bcrypt'gem来存储数据库中的密码.
在comments_controller.rb中是这样的
@comment = Comment.new(comment_params)
bcrypted_pwd = BCrypt::Password.create(@comment.user_pwd)
@comment.user_pwd = bcrypted_pwd
Run Code Online (Sandbox Code Playgroud)
当用户想要删除他们的评论时,我使用data-confirm-modal gem来确认数据
在这部分中,我必须解密用户输入密码以与Database中的加密密码进行比较
我怎么能解密密码,有没有什么好方法可以做到这一点?
上周我将Fedora升级到全新的28版本,其中mongodb升级到3.6.请参阅升级到Fedora 28后如何修复mongodb服务?因为我设法解决了我的第一个问题,即mongod将不再启动.现在我在使用同一个数据库的Rails应用程序上面临另一个问题.
这很可能与mongodb升级无关,但我认为值得提供上下文并且不要错过没有提供足够的上下文的解决方案.
因此,自系统升级以来,对此Rails项目的任何登录尝试都将失败BCrypt::Errors::InvalidHash in Devise::SessionsController#create
,并在bcrypt (3.1.11) lib/bcrypt/password.rb:60:ininitialize'`处引发错误.在项目的Rails控制台中进一步分析,似乎对此方法的任何调用都将失败:
> BCrypt::Password.create('TestPassword')
BCrypt::Errors::InvalidHash: invalid hash
from /home/psychoslave/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:60:in `initialize'
Run Code Online (Sandbox Code Playgroud)
我试图bundle卸载/重新安装bcrypt,甚至使用bcrypt gem的github存储库版本,但它没有改变任何东西.
看/home/psychoslave/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:60:in初始化'`,问题似乎哈希是无效的.
# Initializes a BCrypt::Password instance with the data from a stored hash.
def initialize(raw_hash)
if valid_hash?(raw_hash)
self.replace(raw_hash)
@version, @cost, @salt, @checksum = split_hash(self)
else
raise Errors::InvalidHash.new("invalid hash")
end
end
Run Code Online (Sandbox Code Playgroud)
相应的测试如下:
def valid_hash?(h)
h =~ /^\$[0-9a-z]{2}\$[0-9]{2}\$[A-Za-z0-9\.\/]{53}$/
end
Run Code Online (Sandbox Code Playgroud)
散列本身是通过BCrypt::Engine.hash_secret(secret, BCrypt::Engine.generate_salt(cost))在我使用调用的平台中 创建的__bc_crypt(secret.to_s, salt),它似乎调用了bcrypt-3.1.11/ext/mri/bcrypt_ext.c.
更重要的是binding.pry,在 …
我有一个API,我安装了下一个gem
gem 'bcrypt'
Run Code Online (Sandbox Code Playgroud)
进入我的用户模型我具体说:
has_secure_password
Run Code Online (Sandbox Code Playgroud)
我的数据库有一个名称字段
password_digest
Run Code Online (Sandbox Code Playgroud)
并且当运行播种器时,密码是加密的,但是当尝试从我的方法创建一个新用户时,密码是正常的,这是我创建新用户的方法
def self.from_auth(data)
User.where(email: data[:email]).first_or_create do |user|
user.email = data[:info][:email]
user.name = data[:info][:name]
user.provider = data[:info][:provider]
user.uid = data[:info][:uid]
user.password_digest = data[:info][:password]
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
使用ruby-bcrypt加密字符串时是否可以指定使用哪种盐?
我知道它不是很安全,但我只使用它来获得不高的安全数据:我有一个平台,当用户删除他的帐户时,我仍然想知道此用户之前是否已注册此电子邮件(由于免费)注册学分).
所以我想我会用Bcrypt加密电子邮件(删除之前),之后我可以查询当用户想要再次注册这个电子邮件地址时是否存在这个哈希?
但现在我意识到bcrypt总是采用新的盐...我可以用某种方式指定盐吗?
谢谢,
免责声明/注意:
一般来说,你不应该直接指定盐 - 它的不确定!
bcrypt-ruby ×10
bcrypt ×4
ruby ×4
encryption ×2
bundler ×1
doorkeeper ×1
fedora-28 ×1
gem ×1
model ×1
mongodb-3.6 ×1
oauth-2.0 ×1
passwords ×1