Где создать пользователей OAuth с cemerick/friend в Clojure

Наконец-то я получил рабочие процессы OAuth, работающие для входа в Twitter и Facebook в моем проекте Clojure Compojure, но мне нужно обрабатывать новых пользователей. Где в рабочем процессе Friend я должен создавать несуществующих пользователей в моем хранилище данных? Возможно, внутри credential-fn?


person Petrus Theron    schedule 29.09.2014    source источник


Ответы (1)


Это правильно. credential-fn из одного из моих проектов сейчас выглядит примерно так:

(defn linkedin-auth [{access-token :access-token :as m}]
    (let [options      {:query-params {:oauth2_access_token access-token
                                      :format "json"}}
          account-info (http-json "https://api.linkedin.com/v1/people/~" options)
          email        (http-json "https://api.linkedin.com/v1/people/~/email-address" options)]
    (register-or-load-from-db
       {:roles #{::user}
        :identity email
        :name (str (:firstName account-info) " " (:lastName account-info))}))))

И конфигурация рабочего процесса:

(oauth2/workflow {:client-config linkedin-client-config
                  :uri-config    linkedin-uri-config
                  :credential-fn #'linkedin-auth
                  :login-uri     "/linkedinlogin"})
person DanLebrero    schedule 29.09.2014
comment
Спасибо, @dAni. Как мне получить доступ к :session или текущему пользователю, вошедшему в систему, из credential-fn, чтобы я мог связать их идентификатор с существующей учетной записью, если они уже вошли в систему? - person Petrus Theron; 29.09.2014
comment
возможно, я смогу добиться этого, добавив дополнительный рабочий процесс fn, который анализирует вывод учетных данных различных поставщиков? - person Petrus Theron; 29.09.2014
comment
credential-fn должен принимать один параметр, который будет содержать карту учетных данных пользователя. Карта учетных данных пользователя зависит от используемого метода аутентификации. В случае друга-oauth2 карта содержит токен доступа, который затем можно использовать для запроса дополнительной информации у поставщика oauth (как вы можете видеть в моем примере). Результат credential-fn становится частью информации о сеансе. - person DanLebrero; 29.09.2014