Попытка создать логин пользователя для сайта Clojure / Korma / PostgreSQL
Я полностью застрял на том, с чего начать с получения зоны входа на сайт Clojure, который я создаю (для развлечения).
Я посмотрел на несколько ресурсов, которые я опубликую ниже, беспощадно копирую / вставляю код, и ближе всего я могу получить одну из двух ситуаций:
Страница входа принимает имя входа, но говорит, что вход не выполнен, хотя, насколько я могу судить, вход совпадает.
Или я получаю эту ошибку: Нет метода в multimethod '->sql' для значения отправки: null
Я не уверен, как интерпретировать вышеупомянутую ошибку: это указывает, что мне нужен мульти-метод, или это указывает, что мне нужно проверить на ноль? Нулевое требование не имеет никакого смысла вообще. Я на самом деле не спрашиваю, но если кто-то хочет дать объяснение, это здорово.
Я проверил вывод, сравнив результаты запросов к выбору из необработанных необработанных данных, я прошел через 5 вариантов этой темы, используя все от вызовов "страница-к-странице" до создания новых функций по умолчанию, нескольких методов, определения, так далее.
Источники, которые я использовал (к сожалению, я не могу перечислить все из них, как первый постер):
Этот использует Clojure -> Korma -> PostgreSQL, но кажется, что код не работает для нескольких пользователей?
http://www.vijaykiran.com/2012/01/17/web-application-development-with-clojure-part-2/
Этот пример показывает, как использовать Noir и PostgreSQL (да, я использую Noir): https://yogthos.net:11794/blog/23-Noir+tutorial+-+part+2
Сайт 4Clojure, но этот использует CongoMongo:
Клон Heroku Twitter, но нет упоминаний о том, как создавать логины для одного человека, а тем более нескольких.
Я также купил Программирование Clojure от О'Рейли Пресс, но опять же, ничего о том, как создать область входа в систему.
ПЕРВОЕ РЕДАКТИРОВАНИЕ: меня попросили создать репозиторий github для отдельного сайта. Это включает в себя рабочую область "Создание учетной записи", которая находится в файле welcome.clj, и только форму области "Вход в систему" в login.clj.
Я пытался заставить работать некоторые из тех же ошибок, что и прошлой ночью, а также пытался заставить их работать до того, как загрузил файлы. У меня пока нет разумных отправных точек, поэтому пока нет начала реализации. Я серьезно смущен решениями, которые я придумываю, поэтому я не хочу публиковать их. Я концептуально понимаю, что должен делать, но по какой-то причине не могу перевести это. Это моя первая учетная запись на github: мой опыт работы с Python, Scheme a'la SICP и какой-то маркетинговой программой Python + PostgreSQL, которую я создал.
ВТОРОЙ РЕДАКТИРОВАТЬ: Ack! Кажется, я не могу заставить эту вещь работать вообще... Да, я потратил более 20 минут (часов) на эту, так что я просто должен признать, что у меня пока нет необходимых знаний для достижения цели. это, независимо от того, сколько источников я смотрю. Я передал обновленные файлы и все странные вещи, которые я пробовал, включая все варианты в окне входа в систему, для запуска сырого SQL. Самое близкое, что я могу получить, это получить его, чтобы я не получил никаких ошибок, но никаких доказательств того, что кто-то вошел в систему. Большое спасибо за помощь и предложения. Я наверняка вернусь к этому позже.
1 ответ
Есть пара вопросов, которые я вижу. Первый в datapass.clj
вы создаете сущность без контента. Я не уверен, как Корма справляется с этим. Он пытается передать результаты в качестве входных данных для других функций, поэтому я мог видеть, как nil
познакомится там.
Во-вторых, вам нужно что-то для обработки сообщения входа в систему. (defpage ...)
только обрабатывает запросы GET по умолчанию. Вам понадобится отдельный defpage
обрабатывать почту. Что-то вроде этого:
(defpage [:post "/login"] {:keys [user-name pwd]}
(if-let [user (db/find-user user)]
(if (noir.util.crypt/compare pwd (:password user))
(do
(noir.session/put! :some-key some-value)
(noir.response/redirect "/success"))
noir.response/redirect "/failed-to-login"))
(noir.response/redirect "/failed-to-login"))
session/put!
как вы помещаете данные в сессию. По умолчанию используется хранилище в памяти. Вам потребуется добавить промежуточное программное обеспечение Ring, чтобы использовать постоянные сеансы (см. Хранилища сеансов).
Кроме того, если повезет, кто-то только что опубликовал приложение аутентификации для Noir... вы можете посмотреть: https://github.com/xavi/noir-auth-app