Аутентификация не проходит после отправки - rails 4

Я пытаюсь сделать простое приложение аутентификации / регистрации ruby. Я использую BCrypt gem для шифрования, и теперь у меня возникают некоторые проблемы. Когда я нажимаю кнопку отправки, он бросает

undefined method `password_salt=' for #<User:0x007f93c36bc570>

Итак, я понял, что этот код должен быть местами от модели до coontroler, но это дало мне это

undefined local variable or method `encrypt_password' for #<User:0x007f93c5f35f10>

Я попробовал rake db: перенести и перезапустить приложение, а также git repo: https://github.com/pumpurs/auth

(код, о котором я говорю)

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

контроллер:

class UsersController < ApplicationController
  def new
  @user = User.new
end
def create
@user = User.new(params[:user].permit(:password, :email, :password_confirmation))
  if @user.save
  redirect_to root_url, :notice => "Signed up!"
else
  render "new"
end
  end

  private

  def user_params
params.require(:user).permit(:password, :email, :password_confirmation)
  end
end

файл модели:

class User < ActiveRecord::Base
  attr_accessor :password, :salt
  before_save :encrypt_password
  validates_confirmation_of :password
  validates_presence_of :password, :on => :create 
  validates_presence_of :email
  validates_uniqueness_of :email
   def encrypt_password
if password.present?
  self.password_salt = BCrypt::Engine.generate_salt
  self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
  end
end

1 ответ

Решение

Добавлять

 attr_accessor :password_salt

в модели?

Почему бы не использовать Devise или другой драгоценный камень аутентификации?

Другие вопросы по тегам