【问题标题】:Where to create OAuth users with cemerick/friend in Clojure在 Clojure 中使用 cemerick/friend 在哪里创建 OAuth 用户
【发布时间】:2014-11-23 13:20:06
【问题描述】:

我终于在我的 Clojure Compojure 项目中获得了适用于 Twitter 和 Facebook 登录的 OAuth 工作流程,但我需要处理新用户。我应该在 Friend 工作流程的哪个位置在我的数据存储中创建不存在的用户?可能在credential-fn 里面?

【问题讨论】:

    标签: clojure compojure


    【解决方案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"})
    

    【讨论】:

    • 谢谢,@dAni。我如何访问 :session 或来自 credential-fn 的当前登录用户,以便我可以将他们的标识符与现有帐户相关联(如果他们已经登录)?
    • 也许我可以通过添加一个额外的工作流 fn 来解析各种提供者的 credential-fn 的输出来实现这一点?
    • credential-fn 必须接受一个参数,该参数将包含用户凭据映射。用户凭据映射取决于使用的身份验证方法。对于friend-oauth2,映射包含访问令牌,然后您可以使用该令牌从oauth 提供者请求附加信息(如您在我的示例中所见)。 credential-fn 的结果最终作为会话信息的一部分
    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2011-06-02
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多