неопределенный метод `salt = ' - PullRequest
2 голосов
/ 11 апреля 2011

Я пытаюсь добавить пароль на мой сайт.Но когда я регистрирую учетную запись, страница, которая появляется после того, как я нажимаю кнопку регистрации, является страницей ошибки, показывающей:

неопределенный метод salt=' for #<User:0x37f8168> app/models/user.rb:34:in encrypt_password 'app / controllers / users_controller.rb: 19: in`create '

В моем user.rb у меня есть:

def encrypt_password
      self.salt = make_salt if new_record?
      self.encrypted_password = encrypt(password)
    end

    def encrypt(string)
      secure_hash("#{salt}--#{string}")
    end

В users_controller.rb у меня есть

def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to PennTwit"
      redirect_to @user
    else
      @title = "Sign up"
      render 'new'
    end
  end

Ошибка со строками:

if @user.save

self.salt = make_salt if new_record?

Я попытался изменить self.salt на @salt, но он дал мне еще одну ошибку, сказав, что соль в

secure_hash ("# {salt} - # {string}")не найден.

Есть идеи?Спасибо!

Ответы [ 3 ]

4 голосов
/ 11 апреля 2011

Это означает, что salt равно an undefined method:)

Я думаю, что у вас нет поля salt в вашей базе данных users таблица.

Показать структуру пользовательских таблиц (или хотя бы миграцию)

1 голос
/ 11 апреля 2011

Вы должны сделать атрибут salt как attr_accessor в вашей модели, например

attr_accessor :salt

0 голосов
/ 11 апреля 2011

в файле gem добавьте Bcrypt, его ответственность за шифрование / дешифрование

gem "bcrypt-ruby",: require => "bcrypt"

теперь отредактируйте ваш метод

def encrypt_password 

    if password.present? 
       self.password_salt = BCrypt::Engine.generate_salt 
       self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)  
    end
...