Наконец-то я получил рабочие процессы OAuth, работающие для входа в Twitter и Facebook в моем проекте Clojure Compojure, но мне нужно обрабатывать новых пользователей. Где в рабочем процессе Friend я должен создавать несуществующих пользователей в моем хранилище данных? Возможно, внутри credential-fn
?
Где создать пользователей OAuth с cemerick/friend в Clojure
Ответы (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
Спасибо, @dAni. Как мне получить доступ к
:session
или текущему пользователю, вошедшему в систему, из credential-fn
, чтобы я мог связать их идентификатор с существующей учетной записью, если они уже вошли в систему?
- person Petrus Theron; 29.09.2014
возможно, я смогу добиться этого, добавив дополнительный рабочий процесс fn, который анализирует вывод учетных данных различных поставщиков?
- person Petrus Theron; 29.09.2014
credential-fn
должен принимать один параметр, который будет содержать карту учетных данных пользователя. Карта учетных данных пользователя зависит от используемого метода аутентификации. В случае друга-oauth2 карта содержит токен доступа, который затем можно использовать для запроса дополнительной информации у поставщика oauth (как вы можете видеть в моем примере). Результат credential-fn становится частью информации о сеансе.
- person DanLebrero; 29.09.2014