gpt4 book ai didi

haskell - 如何使用环境变量中的客户端 ID 和 secret 配置 Google OAuth?

转载 作者:行者123 更新时间:2023-12-05 02:20:43 24 4
gpt4 key购买 nike

我不希望我的应用程序的客户端 ID 和 secret ID 成为我的源代码的一部分。因此,如果我在运行时从环境变量中读取这些设置,它们将始终被包装在 IO 中。这会导致一个问题,因为那样他们将无法组合:

authPlugins :: master -> [AuthPlugin master]
authGoogleEmail :: YesodAuth m => Text -> Text -> AuthPlugin m
getEnv :: String -> IO String

另一种提出这个问题的方法是:如何从 http://www.yesodweb.com/book/authentication-and-authorization 给出的第一个示例代码中的环境中读取 clientIdclientSecret

最佳答案

未测试,但这应该有效: 完整示例:http://lpaste.net/167997

  1. 在您的应用程序记录中添加客户端 ID 和密码的字段:

    data App = App { ...
    , gmailClientId :: Text
    , gmailClientSecret :: Text
    }
  2. 修改 authPlugins 方法以从 App 记录中查找客户端 ID 和 secret 值:

    instance YesodAuth App where
    ...
    authPlugins app = [ ...
    , authGoogleEmail (gmailClientId app) (gmailClientSecret app)
    ]
  3. 在调用warp之前初始化main中的App记录:

    main = do
    clientId <- getEnv "CLIENT_ID"
    clientSecret <- getEnv "CLIENT_SECRET"
    ...
    let app = App { ..., gmailClientId = clientId, gmailClientSecret = clientSecret }
    warp 3000 app

关于haskell - 如何使用环境变量中的客户端 ID 和 secret 配置 Google OAuth?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com