我需要在Devise下直接在控制台中验证用户.我该怎么做?

dan*_*dan 14 devise ruby-on-rails-3

我需要从Rails控制台做一些这样的事情来做一些测试和实验:

User.authenticate(用户名,密码)

我正在使用Devise,但我不知道该怎么做.

我在这里看到了另一个答案

如何使用Rails控制台中的Devise登录用户?

但我需要更清洁,更直接的东西.如果有必要,我只需要算法使用salt散列尝试的密码并将其与encryped_pa​​ssword进行比较.

是这个吗?

User.find(1).valid_password?('password123') 
Run Code Online (Sandbox Code Playgroud)

Sin*_*lel 25

基本信息:

查看此处Devise README.

例如,这是一个可以用来执行此测试的辅助方法:

class User
    def self.authenticate(username, password)
        user = User.find_for_authentication(:username => username)
        user.valid_password?(password) ? user : nil
    end
end
Run Code Online (Sandbox Code Playgroud)

测试它,我得到:

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
Run Code Online (Sandbox Code Playgroud)

还在工作:User.find(1).valid_password?('1')在Rails控制台中:

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
Run Code Online (Sandbox Code Playgroud)

作为参考,这是我的用户模型的Devise设置:

class User < ActiveRecord::Base`

  devise :database_authenticatable, :registerable, :timeoutable, :recoverable, :rememberable, :trackable, :validatable

  {...}

end
Run Code Online (Sandbox Code Playgroud)

就像你在评论中说的那样,sessions_controller自设计之后就没有了.查看Devise配置文件/config/initializers/devise.rb.根据您的应用程序配置,您可能还需要查看token.rbsession_store.rb初始化程序配置.

编辑:您可以检查您的用户模型,看看是否正确配置了设备?将它与我的devise线对比.该:validatable物业可能遗失.

编辑2:如果您想在控制台之外执行此操作,请添加辅助方法来执行此测试.检查顶部.

旁注:rails_admin宝石非常有用,可能值得一试!

希望有所帮助.


Aja*_*jay 5

我认为没有使用任何类型的宝石,工具可以更简单.至少我们知道电子邮件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 
Run Code Online (Sandbox Code Playgroud)

  • 我不确定这种方法如何更简单。它看起来与我上面发布的相同,只是没有包裹在帮助程序中。另外,“不使用任何类型的宝石”如何?您也在使用 Devise(对吗?),这是我们都在谈论的唯一 gem。哈哈,我意识到发布这些内容已经有一段时间了(加上我有一段时间没有看过 Rails),所以我感谢任何澄清。谢谢! (3认同)