看起来如果您通过这些管理器/Facebook monad 层将重定向 URL 传回,那么您就可以提供它。重定向 URL 的类型是Text
,它有一个RedirectUrl
typeclass 的实例,这是使用该redirect
函数所必需的(如文档中所示)。
您应该能够通过以下方式完成这项工作:
getAccessTokenR :: Handler RepHtml
getAccessTokenR = do
url <- withManager $ \manager ->
FB.runFacebookT creds manager $
FB.getUserAccessTokenStep1 redirUrl []
redirect url
这里没有真正的魔法,你基本上有两种高级模式,一种是“with”模式,它将本地化资源的使用(在本例中为manager
),另一种是“运行”模式,那是真的使用 Monad 变换器(不要太担心细节!)。
所以withManager
给你一个经理来使用,大概它会处理一些经理的设置和删除。这可能是这样的
withManager :: (Manager -> Handler a) -> Handler a
在其中你有 facebook runner,它将被键入:
runFacebookT :: Credentials -> Manager -> FacebookT Auth Handler a -> Handler a
这基本上是说,如果你给它一些凭据、管理器和一些 Facebook 特定的计算(比如获取重定向 URL),它可以将其转换为你选择的 Monad(这里我们选择Handler
,因为这就是withManager
想要的)。在您的情况下,a
类型变量是Text
重定向 URL 的。
使用这对with
和run
模式,我们得到的结果是,在深处提供的 URL 会冒泡到我们的Handler
monad 中。然后我们把它找出来并把它交给redirect
函数!