我需要从Rails控制台做一些这样的测试和实验:
User.authenticate(用户名,密码)
我正在使用Devise,但我不知道该怎么做。
我在这里看到了另一个答案
How to sign in a user using Devise from a Rails console?
但我需要更清洁,更直接的东西。如果有必要,我只需要算法使用salt散列尝试的密码并将其与encryped_password进行比较。
这是吗?User.find(1).valid_password?('password123')
答案 0 :(得分:24)
举个例子,这里有一个帮助方法可以用来做这个测试:
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
正如你在评论中所说,自设计以来没有sessions_controller
。查看/config/initializers/devise.rb
中的Devise配置文件。根据您的应用程序配置,您可能还需要查看token.rb
和session_store.rb
初始化程序配置。
编辑:您是否可以检查您的用户模型,看看是否正确配置了设备?将其与我的devise
行进行比较。 :validatable
属性可能会丢失。
编辑2:如果要在控制台之外执行此操作,请添加辅助方法来执行此测试。检查顶部。
旁注:rails_admin
gem非常有用,可能值得一试!
希望有所帮助。
答案 1 :(得分:5)
我认为在不使用任何类型的gem的情况下,实现可以更简单。 至少我们知道电子邮件ID。
电子邮件:'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