OAuth2 AuthPlugins for Yesod.
To use one of the supported providers:
import Yesod.Auth import Yesod.Auth.OAuth2.Github instance YesodAuth App where -- ... authPlugins _ = [oauth2Github clientId clientSecret] clientId :: Text clientId = "..." clientSecret :: Text clientSecret = "..."Some plugins, such as GitHub and Slack, have scoped functions for requesting additional information:
import Yesod.Auth import Yesod.Auth.OAuth2.Slack instance YesodAuth App where -- ... authPlugins _ = [oauth2SlackScoped clientId clientSecret slackScopes] where slackScopes = [SlackEmailScope, SlackAvatarScope, SlackTeamScope] clientId :: Text clientId = "..." clientSecret :: Text clientSecret = "..."To use any other provider:
import Yesod.Auth import Yesod.Auth.OAuth2 instance YesodAuth App where -- ... authPlugins _ = [myPlugin] myPlugin :: AuthPlugin m myPlugin = authOAuth2 "mysite" (OAuth2 { oauthClientId = "..." , oauthClientSecret = "..." , oauthOAuthorizeEndpoint = "https://mysite.com/oauth/authorize" , oauthAccessTokenEndpoint = "https://mysite.com/oauth/token" , oauthCallback = Nothing }) makeCredentials makeCredentials :: Manager -> AccessToken -> IO (Creds m) makeCredentials manager token = do result <- authGetJSON manager token "https://mysite.com/api/me.json" return $ -- Parse the JSON into (Creds m)If you write one of these, please consider opening a Pull Request