【发布时间】:2014-11-23 13:20:06
【问题描述】:
我终于在我的 Clojure Compojure 项目中获得了适用于 Twitter 和 Facebook 登录的 OAuth 工作流程,但我需要处理新用户。我应该在 Friend 工作流程的哪个位置在我的数据存储中创建不存在的用户?可能在credential-fn 里面?
【问题讨论】:
我终于在我的 Clojure Compojure 项目中获得了适用于 Twitter 和 Facebook 登录的 OAuth 工作流程,但我需要处理新用户。我应该在 Friend 工作流程的哪个位置在我的数据存储中创建不存在的用户?可能在credential-fn 里面?
【问题讨论】:
没错。我的一个项目中的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"})
【讨论】:
:session 或来自 credential-fn 的当前登录用户,以便我可以将他们的标识符与现有帐户相关联(如果他们已经登录)?
credential-fn 必须接受一个参数,该参数将包含用户凭据映射。用户凭据映射取决于使用的身份验证方法。对于friend-oauth2,映射包含访问令牌,然后您可以使用该令牌从oauth 提供者请求附加信息(如您在我的示例中所见)。 credential-fn 的结果最终作为会话信息的一部分