我需要从Rails控制台执行以下操作,以进行一些测试和实验:
User.authenticate(username, password)
我正在使用Devise,但我不知道如何做到这一点。
我看到了这个答案
但我需要更简洁和直接的方法。如果必要的话,我只需要一个用盐值对尝试的密码进行哈希并将其与加密后的密码进行比较的算法。
是这样吗?
User.find(1).valid_password?('password123')
我需要从Rails控制台执行以下操作,以进行一些测试和实验:
User.authenticate(username, password)
我正在使用Devise,但我不知道如何做到这一点。
我看到了这个答案
但我需要更简洁和直接的方法。如果必要的话,我只需要一个用盐值对尝试的密码进行哈希并将其与加密后的密码进行比较的算法。
是这样吗?
User.find(1).valid_password?('password123')
举个例子,这是一个你可以使用的辅助方法来进行测试:
class User
def self.authenticate(username, password)
user = User.find_for_authentication(:username => username)
user.valid_password?(password) ? user : nil
end
end
测试一下,我得到:
1.9.3p194 :001 > user = User.find(1)
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
User id: 1, {...USER DETAILS SHOWN HERE...}
1.9.3p194 :002 > user.valid_password?('is this it?')=> false
在 Rails 控制台中,User.find(1).valid_password?('1')
也可以正常工作:
1.9.3p194 :011 > User.find(1).valid_password?('1')
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
=> false
作为参考,这是我针对用户模型的Devise设置:
class User < ActiveRecord::Base`
devise :database_authenticatable, :registerable, :timeoutable, :recoverable, :rememberable, :trackable, :validatable
{...}
end
像您在评论中所说,Devise没有。请查看/config/initializers/devise.rb
中的Devise配置文件。根据您的应用程序配置,您可能还需要查看token.rb
和session_store.rb
初始化器配置。devise
行进行比较。 :validatable
属性可能不存在。rails_admin
gem非常有用,值得一试!我认为在不使用任何 gem 的情况下,实现可以变得更简单。至少我们知道电子邮件地址。
电子邮件地址: 'currentuser@email.com' 当前密码:'rubyuser'
user = User.find_by_email('currentuser@email.com')
user.valid_password?('wrong_password') #returns false
user.valid_password?('rubyuser') #returns true