Какой предпочтительный способ выполнить аутентификацию пользователя и авторизацию в Clojure?
Я работаю над веб-приложением в Clojure как побочный проект, и я пытаюсь выяснить, как выполнить аутентификацию пользователя и выполнить аутсорсинг. Из гуглинга, который я сделал, я слышал о песчаной отмели, но после прочтения двух блогов на песочнице (часть 1, Часть 2), у меня осталось больше вопросов, чем ответов. Я рассмотрел исходный код для 4clojure, и из того, что я могу сказать, они сворачивают свои собственные, проблема в том, что код не очень хорошо комментируется, если вообще. Я думаю, мне нужно перевернуть мою собственную систему и использовать либо sandbar, либо noir.session для передачи информации о пользователях. Может ли кто-нибудь указать мне в правильном направлении? Я чувствую, что мне не хватает чего-то простого.
Ответы
Ответ 1
Я посмотрел 4clojure код входа в систему, и я думаю, что довольно ясно, как работает реализация. В основном это традиционная HTTP-аутентификация. Введите пользователя /pwd в форму URL, проверьте имя пользователя и пароль и обновите сеанс информацией о пользователе, которая может быть использована для дальнейших запросов, чтобы проверить, является ли этот сеанс действительным зарегистрированным пользователем.
Вот как работает большинство аутентификации веб-приложений. Теперь это "что делать" часть ситуации, так как "как это сделать" вы можете реализовать ее самостоятельно, используя "примитивные" функции, предоставляемые веб-каркасом, или, возможно, использовать какое-то среднее программное обеспечение, которое делает это для вас вместе с предоставлением некоторые крючки, чтобы немного настроить реализацию.
Ответ 2
Chas Emerick Friend теперь доступна библиотека. Он по-прежнему относительно новый, но выглядит многообещающим и достаточно хорошо документированным.
Ответ 3
Для аутентификации, помимо очевидной "перемотки вашей собственной", я нашел https://github.com/mattrepl/clj-oauth, чтобы хорошо работать, если вы хотите использовать OAUTH (например, через Twitter). Как только вы приобрели информацию о пользователе, сохранение его в каком-либо объекте сеанса (через ring-middleware-session или аналогичные абстракции) кажется очевидным.
Для авторизации, описанной в сообщении блога, с которым вы связаны, - обертывание определенных маршрутов с помощью промежуточного программного обеспечения авторизации (или любой другой абстракции, предлагаемой вашим предпочтительным веб-стеклом, например pre-route
в Noir) хорошо работает.
Ответ 4
Там также есть альтернатива Другу, называемая Buddy.
В чем разница с Другом?
Бадди авторизации/проверки подлинности более низкий уровень и менее самоуверенный, что друг и позволяют строить над ними легкие другие абстракции высокого уровня. Технически, абстракция друга может быть построена поверх приятеля