Как использовать функцию покупателя ha sh для пользователя в рельсах? - PullRequest
0 голосов
/ 12 марта 2020

В моей пользовательской модели у меня есть

create_table "users", force: :cascade do |t|
  t.string "name"
  t.string "email"
  t.datetime "created_at", precision: 6, null: false
  t.datetime "updated_at", precision: 6, null: false
  t.string "password_digest"
end

Я не понимаю, как t.string "password_digest" работает в рельсах? Будет ли использоваться функция ha sh по умолчанию?

1 Ответ

0 голосов
/ 12 марта 2020

Rails не будет автоматически ничего делать с вашим столбцом только потому, что он называется password_digest. На самом деле вам нужно реализовать шифрование пароля, чтобы что-то произошло.

В Rails введено has_secure_password в 3.1, чтобы создать стандартизированный способ обработки шифрования пароля и избежать ловушек при повторном изобретении колеса шифрования пароля. .

# make sure you add bcrypt to the gemfile and run bundle install
class User < ApplicationRecord
  has_secure_password
end

Добавляет установщик password= в модель, который хэширует пароль с помощью bcrypt и устанавливает password_digest. Он также добавляет установщик и проверки password_confirmation=.

Затем вы можете аутентифицировать пользователей, вызвав:

class SessionsController
  def create
    # will be nil or false if the email or password does not check out
    @user = User.find_by(params[:email])&.authenticate(params[:password])
    if @user
      session[:user_id] = @user.id
      redirect_to '/somewhere'
    else
      render :new, notice: 'Invalid email or password'
    end
  end
end

Это сравнивает результат хеширования params[:password] со значениями, хранящимися в базе данных. , Конечно, вам не следует изобретать колесо аутентификации, если вы не хотите больше узнавать о колесах. Для производственных приложений вы должны действительно выбрать проверенные решения, такие как Devise.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...