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

时间:2011-07-17 14:32:54

标签: ruby-on-rails-3 devise

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

  

User.authenticate(用户名,密码)

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

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

How to sign in a user using Devise from a Rails console?

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

这是吗?

User.find(1).valid_password?('password123') 

2 个答案:

答案 0 :(得分:24)

一般信息:

查看Devise README found here.

举个例子,这里有一个帮助方法可以用来做这个测试:

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.rbsession_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