如何使用环境变量中的客户端 ID 和机密配置 Google OAuth?
How to configure Google OAuth with client ID and secret from environment variables?
我不希望我的应用程序的客户端 ID 和机密 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
给出的第一个示例代码中的环境中读取 clientId
和 clientSecret
未测试,但这应该有效:完整示例:http://lpaste.net/167997
将客户端 ID 和机密的字段添加到您的应用程序记录中:
data App = App { ...
, gmailClientId :: Text
, gmailClientSecret :: Text
}
修改authPlugins方法,从App记录中查找client id和secret值:
instance YesodAuth App where
...
authPlugins app = [ ...
, authGoogleEmail (gmailClientId app) (gmailClientSecret app)
]
在调用warp
前初始化main
中的App记录:
main = do
clientId <- getEnv "CLIENT_ID"
clientSecret <- getEnv "CLIENT_SECRET"
...
let app = App { ..., gmailClientId = clientId, gmailClientSecret = clientSecret }
warp 3000 app
我不希望我的应用程序的客户端 ID 和机密 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
给出的第一个示例代码中的环境中读取clientId
和 clientSecret
未测试,但这应该有效:完整示例:http://lpaste.net/167997
将客户端 ID 和机密的字段添加到您的应用程序记录中:
data App = App { ... , gmailClientId :: Text , gmailClientSecret :: Text }
修改authPlugins方法,从App记录中查找client id和secret值:
instance YesodAuth App where ... authPlugins app = [ ... , authGoogleEmail (gmailClientId app) (gmailClientSecret app) ]
在调用
warp
前初始化main
中的App记录:main = do clientId <- getEnv "CLIENT_ID" clientSecret <- getEnv "CLIENT_SECRET" ... let app = App { ..., gmailClientId = clientId, gmailClientSecret = clientSecret } warp 3000 app