2014-01-17 6 views
0

Я пытаюсь реализовать аутентификацию друга в своем веб-приложении, но когда я пытаюсь войти, я получаю это */login? & login_failed = Y & username = * ... мой параметр пуст, и я не могу войти в систему, что я делаю неправильно?Друг аутентификации пустой параметр

это мои маршруты ...

(defroutes routes 

(GET "/" [] (index)) 
(GET "/indexMessage" [] (indexMessage)) 
(GET "/login" req (index)) 

(POST "/insert-user" {params :params} 
    (let [firstname (get params "firstname") 
     lastname (get params "lastname") 
     email (get params "email") 
     password (get params "password") 
     sex (get params "sex") 
     year (get params "year") 
     month (get params "month") 
     day (get params "day")] 
    (def date (str year"-"month"-"day)) 
    (insert-user firstname lastname email password sex date))) 

(route/resources "/public") 
(route/not-found "Page not found") 
) 

я использовал все промежуточное необходимое ...

(def page (handler/site 
     (friend/authenticate 
      routes 
      {:allow-anon? true 
      :login-uri "/login" 
      :default-landing-uri "/" 
      :unauthorized-handler #(-> (html5 [:h2 "You do not have sufficient privileges to access " (:uri %)]) 
            resp/response 
            (resp/status 401)) 
      :credential-fn #(creds/bcrypt-credential-fn @users %) 
      :workflows [(workflows/interactive-form)]}) 
      (wrap-keyword-params routes) 
      (wrap-nested-params routes) 
      (wrap-params routes) 
      (wrap-session routes) 


     )) 

и это, как я начинаю мой сервер ... пристани

(defn -main [] 
(run-jetty page {:port 8080 :join? false})) 

пользователи - это карта, подобная этой ...

{"username" {:username "username" :password "password"}} 

is: Роли должны быть на карте? Возможно, из-за этого?

+1

Это может быть несвязанным, но код для вашего маршрута '/ insert_user' содержит инструкцию' def', что является плохой практикой, поскольку она определяет символ ('date') на уровне вашего пространства имен при первом выполняется и переопределяет его каждый раз, когда вы пытаетесь получить доступ к этому маршруту. Из того, что я вижу, 'date' используется только в локальном контексте, и поэтому вместо этого должна быть другая строка в вашем векторе инициализации' let'. –

ответ

1

Я довольно новичок в другом, но из исходного кода друга могу сказать, что имя параметра вашего запроса POST имеет значение. Я думаю, вы следуете этому примеру, если нет, это лучший намек, который вы можете получить на самом деле. Обратите внимание на имя поля формы

https://github.com/cemerick/friend-demo/blob/master/src/clj/cemerick/friend_demo/interactive_form.clj#L22-l24

Все учетных функции принимают один аргумент, карту, содержащую имеющиеся учетные данные, так , поскольку нет никакого явного POST «/ логин» маршрут, Друг связующего программного обеспечения догоняет и использовать их в качестве учетных данных для вашего верительных-ф, как показано здесь https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L76-78

так что «имя пользователя» и «пароль» должны быть имена параметров публикуемую в: логин-URI

для новичков этот пример является работоспособной здесь http://friend-demo.herokuapp.com/interactive-form/

+0

Я разобрал свою голову над этим в течение двух дней, и теперь я вижу, что я забыл поставить: имя в моей форме входа ... какая глупая ошибка ... но в любом случае, спасибо многому человеку! – Shile

Смежные вопросы