yesod-auth doesn't use redirects for JSON requests (fixes #479)
This commit is contained in:
parent
8246aa4c1e
commit
e2cd292877
@ -162,26 +162,39 @@ mkYesodSub "Auth"
|
|||||||
/page/#Text/STRINGS PluginR
|
/page/#Text/STRINGS PluginR
|
||||||
|]
|
|]
|
||||||
|
|
||||||
setCreds :: YesodAuth master => Bool -> Creds master -> GHandler sub master ()
|
setCreds :: YesodAuth master
|
||||||
|
=> Bool
|
||||||
|
-> Creds master
|
||||||
|
-> GHandler sub master ()
|
||||||
setCreds doRedirects creds = do
|
setCreds doRedirects creds = do
|
||||||
y <- getYesod
|
y <- getYesod
|
||||||
maid <- getAuthId creds
|
maid <- getAuthId creds
|
||||||
case maid of
|
case maid of
|
||||||
Nothing ->
|
Nothing -> when doRedirects $ do
|
||||||
when doRedirects $ do
|
|
||||||
case authRoute y of
|
case authRoute y of
|
||||||
Nothing -> do rh <- defaultLayout $ toWidget [shamlet|
|
Nothing -> do
|
||||||
$newline never
|
res <- selectRep $ do
|
||||||
<h1>Invalid login
|
provideRep $ defaultLayout $ toWidget [shamlet|<h1>Invalid login|]
|
||||||
|]
|
provideRep $ return $ object ["message" .= ("Invalid Login" :: Text)]
|
||||||
sendResponse rh
|
sendResponse res
|
||||||
Just ar -> do setMessageI Msg.InvalidLogin
|
Just ar -> do
|
||||||
redirect ar
|
res <- selectRep $ do
|
||||||
|
provideRepType typeHtml $ do
|
||||||
|
setMessageI Msg.InvalidLogin
|
||||||
|
_ <- redirect ar
|
||||||
|
return ()
|
||||||
|
provideRep $ return $ object ["message" .= ("Invalid Login" :: Text)]
|
||||||
|
sendResponse res
|
||||||
Just aid -> do
|
Just aid -> do
|
||||||
setSession credsKey $ toPathPiece aid
|
setSession credsKey $ toPathPiece aid
|
||||||
when doRedirects $ do
|
when doRedirects $ do
|
||||||
onLogin
|
onLogin
|
||||||
redirectUltDest $ loginDest y
|
res <- selectRep $ do
|
||||||
|
provideRepType typeHtml $ do
|
||||||
|
_ <- redirectUltDest $ loginDest y
|
||||||
|
return ()
|
||||||
|
provideRep $ return $ object ["message" .= ("Login Successful" :: Text)]
|
||||||
|
sendResponse res
|
||||||
|
|
||||||
getCheckR :: YesodAuth master => GHandler Auth master TypedContent
|
getCheckR :: YesodAuth master => GHandler Auth master TypedContent
|
||||||
getCheckR = do
|
getCheckR = do
|
||||||
|
|||||||
@ -11,7 +11,6 @@ module Yesod.Core.Json
|
|||||||
|
|
||||||
-- * Produce JSON values
|
-- * Produce JSON values
|
||||||
, J.Value (..)
|
, J.Value (..)
|
||||||
, object
|
|
||||||
, array
|
, array
|
||||||
, (.=)
|
, (.=)
|
||||||
|
|
||||||
@ -26,14 +25,13 @@ import Yesod.Content (TypedContent)
|
|||||||
import Yesod.Internal.Core (defaultLayout, Yesod)
|
import Yesod.Internal.Core (defaultLayout, Yesod)
|
||||||
import Yesod.Widget (GWidget)
|
import Yesod.Widget (GWidget)
|
||||||
import Yesod.Routes.Class
|
import Yesod.Routes.Class
|
||||||
import Control.Arrow (second)
|
|
||||||
import Control.Applicative ((<$>))
|
import Control.Applicative ((<$>))
|
||||||
import Control.Monad (join)
|
import Control.Monad (join)
|
||||||
import qualified Data.Aeson as J
|
import qualified Data.Aeson as J
|
||||||
import qualified Data.Aeson.Parser as JP
|
import qualified Data.Aeson.Parser as JP
|
||||||
import Data.Aeson ((.=))
|
import Data.Aeson ((.=))
|
||||||
import Data.Conduit.Attoparsec (sinkParser)
|
import Data.Conduit.Attoparsec (sinkParser)
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (pack)
|
||||||
import qualified Data.Vector as V
|
import qualified Data.Vector as V
|
||||||
import Data.Conduit
|
import Data.Conduit
|
||||||
import Network.Wai (requestBody, requestHeaders)
|
import Network.Wai (requestBody, requestHeaders)
|
||||||
@ -87,10 +85,6 @@ parseJsonBody_ = do
|
|||||||
J.Error s -> invalidArgs [pack s]
|
J.Error s -> invalidArgs [pack s]
|
||||||
J.Success a -> return a
|
J.Success a -> return a
|
||||||
|
|
||||||
-- | Convert a list of pairs to an 'J.Object'.
|
|
||||||
object :: J.ToJSON a => [(Text, a)] -> J.Value
|
|
||||||
object = J.object . map (second J.toJSON)
|
|
||||||
|
|
||||||
-- | Convert a list of values to an 'J.Array'.
|
-- | Convert a list of values to an 'J.Array'.
|
||||||
array :: J.ToJSON a => [a] -> J.Value
|
array :: J.ToJSON a => [a] -> J.Value
|
||||||
array = J.Array . V.fromList . map J.toJSON
|
array = J.Array . V.fromList . map J.toJSON
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user