Использование модуля Devise / DatabaseAuthenticatable для проверки строки пароля / соли

Я создаю приложение, которое использует Devise для управления состоянием пользователя. Я также создаю API в том же приложении, которое получает имя пользователя и пароль от запроса POST

Чего я пытаюсь достичь, так это:

  • Получить пользователя по имени пользователя из базы данных (сделано, просто)
  • ИспользуйтеDevise::Models::DatabaseAuthenticatable, чтобы взять пароль, который передал пользователь, зашифровать его, сравнить его с encrypted_passwordполем в модели пользователя и, если они одинаковы, продолжить с остальной частью моего кода

Вторая пуля выше-это то, с чем у меня проблемы. В консоли я не могу получить экземпляр модуляDevise::Models::DatabaseAuthenticatable, чтобы попробовать различные методы экземпляра, которые вы можете найти здесь в документах .

Любая помощь будет очень признательна!

1 ответ

  1. Если я правильно понял ваш вопрос, вы можете использовать .valid_password? придумать метод. Что-то вроде того:

    #assuming you'll receive nested params like user[email], user[password]...
    user_params = params.require(:user).permit(:email, :password)
    
    user = User.find_by(email: user_params[:email])
    return head 403 if user.nil?
    valid = user.valid_password?(user_params[:password]) #true or false...
    return head 403 unless valid
    
    sign_in(user) #devise helper: if you want to sign in that user
    

    Вы также можете проверить другие подходы, такие как devise token auth gem.