Базовый http-аутентификация в Clojure/Friend
Я пытаюсь сделать базовую аутентификацию для API в Clojure с другом.
Вот запрос на вход в систему:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'user=myuser%40email.com&pass=super-secret-password' http://localhost:3000/login/
Я также использую compojure, но я не уверен, как повторно использовать связанный пример. Вот части, которые я не знаю, как изменить:
Как заменить поля имени пользователя / пароля полями пользователя / пароля, как в моем запросе curl? Я могу извлечь их из необработанного запроса, но не знаю, как передать его другу (нужно ли изменить
credential-fn
?).Замените пользовательский атом данными из базы данных. у меня есть
auth [email password]
который возвращает истину или ложь (выборка из базы данных и использование bcrypt). Я также могу получить роль пользователя из базы данных. Как использовать базу данных (в частности, я использую mongo/monger) вместо атома пользователя?
1 ответ
Вы можете предоставить совершенно другую учетную запись -fn или придерживаться демонстрации, где учетная запись -fn реализована с использованием cemerick.friend.credentials / bcrypt-credential-fn. Прочитайте документ bcrypt-credential-fn по адресу https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj, это довольно долго. Он ожидает load-credentials-fn, который загружает пользователя с заданной строкой имени пользователя, а затем проверяет, совпадает ли пароль. В демонстрационной версии load-credentials-fn - это карта в атоме пользователей, но если у вас есть база данных, вы захотите предоставить другую функцию load-credentials-fn, которая будет искать базу данных, вы не хотите загружать Ваша таблица пользователей на карте в атоме.