метод аутентификации пропуска из пользовательской модели с использованием secure_password - PullRequest
0 голосов
/ 21 декабря 2011

Использование Rails 3.1.3. Я использую метод аутентификации по паролю, представленный в Railscast 270, чтобы сделать вызов has_secure_password:

class User < ActiveRecord::Base
  has_secure_password
end

Это работает, за исключением одной чрезвычайно загадочной проблемы. Документация гласит использовать

user.authenticate ("notright")

Но я не вижу, где объявлен метод аутентификации. Я посмотрел в secure_password, и, казалось бы, эквивалентный метод:

  # Returns self if the password is correct, otherwise false.
  def get_logged_in_user(unencrypted_password)
    if BCrypt::Password.new(password_digest) == unencrypted_password
      self
    else
      false
    end
  end

Заметьте, я пытаюсь преобразовать пример из railstutorial.org (действительно замечательно), поэтому мне пришлось кое-что изменить, и в моем приложении могло быть что-то противоречащее. Например, у меня ранее была эта строка:

attr_accessor :password

И это препятствовало тому, чтобы объявление пароля = вызывалось в secure_password, в результате столбец db для password_digest был равен нулю. Удаление этой строки исправило эту проблему.

Обновление: я создал новое приложение rails с 3.1.3 и подтвердил, что простейший случай выполнения этих двух команд приводит к ошибке:

u = User.create (: username => "a",: password => "foobar",: password_confirmation => "foobar") (0,1 мс) НАЧАТЬ SQL (0,2 мс) INSERT INTO users (created_at, password_digest, updated_at, username) ЗНАЧЕНИЯ ('2011-12-21 05:18:17', '$ 2a $ 10 $ BbwHbq1bGwvQRgE0xK28VeP8K / lwY .VfLaLsMSs6ogNa1DucephnK ',' 2011-12-21 05:18:17 ',' a ') (42,6 мс) COMMIT

u.authenticate ( "Foobar") u.authenticate ( "Foobar") NoMethodError: неопределенный метод authenticate' for #<User:0xa26e4cc> from /home/justin/.rvm/gems/ruby-1.9.3-p0@testapp/gems/activemodel-3.1.3/lib/active_model/attribute_methods.rb:385:in method_missing ' из /home/justin/.rvm/gems/ruby-1.9.3-p0@testapp/gems/activerecord-3.1.3/lib/active_record/attribute_methods.rb:60:in method_missing' from (irb):4 from /home/justin/.rvm/gems/ruby-1.9.3-p0@testapp/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in start ' от /home/justin/.rvm/gems/ruby-1.9.3-p0@testapp/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in start' from /home/justin/.rvm/gems/ruby-1.9.3-p0@testapp/gems/railties-3.1.3/lib/rails/commands.rb:40:in ' из / home / justin / j / RubymineProjects / auth / script / rails: 6: в require' from /home/justin/j/RubymineProjects/auth/script/rails:6:in ' из -e: 1: в load' from -e:1:in '

UPDATE: Это определенно какая-то проблема с ruby ​​1.9.3. Я попробовал те же самые драгоценности на 1.9.2, и у меня нет проблем.

Ответы [ 2 ]

0 голосов
/ 12 января 2013

Обновление до Ruby 1.9.3 решает проблему.

0 голосов
/ 28 января 2012

Добавление метода аутентификации следующим образом ( source ) решило это для меня.

Я также использую ruby ​​1.9.3.Я не пробовал 1.9.2, как вы.

...