Get rid of maybeAuthIdRaw #486
This commit is contained in:
parent
b5a1d76a40
commit
7748a190f9
@ -1,4 +1,5 @@
|
|||||||
{-# LANGUAGE CPP #-}
|
{-# LANGUAGE CPP #-}
|
||||||
|
{-# LANGUAGE DefaultSignatures #-}
|
||||||
{-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell #-}
|
{-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
{-# LANGUAGE FlexibleInstances #-}
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
@ -20,7 +21,6 @@ module Yesod.Auth
|
|||||||
, setCreds
|
, setCreds
|
||||||
-- * User functions
|
-- * User functions
|
||||||
, defaultMaybeAuthId
|
, defaultMaybeAuthId
|
||||||
, maybeAuthId
|
|
||||||
, maybeAuth
|
, maybeAuth
|
||||||
, requireAuthId
|
, requireAuthId
|
||||||
, requireAuth
|
, requireAuth
|
||||||
@ -137,16 +137,21 @@ class (Yesod master, PathPiece (AuthId master), RenderMessage master FormMessage
|
|||||||
-- especially useful for creating an API to be accessed via some means
|
-- especially useful for creating an API to be accessed via some means
|
||||||
-- other than a browser.
|
-- other than a browser.
|
||||||
--
|
--
|
||||||
-- Note that, if the value in the session points to an invalid
|
|
||||||
-- authentication record, this value could be meaningless, and in conflict
|
|
||||||
-- with the result of 'maybeAuth'. As a result, it is recommended that you
|
|
||||||
-- use 'maybeAuthId' instead.
|
|
||||||
--
|
|
||||||
-- See https://github.com/yesodweb/yesod/issues/486 for more information.
|
|
||||||
--
|
|
||||||
-- Since 1.2.0
|
-- Since 1.2.0
|
||||||
maybeAuthIdRaw :: HandlerT master IO (Maybe (AuthId master))
|
maybeAuthId :: HandlerT master IO (Maybe (AuthId master))
|
||||||
maybeAuthIdRaw = defaultMaybeAuthId
|
|
||||||
|
default maybeAuthId
|
||||||
|
:: ( YesodAuth master
|
||||||
|
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
||||||
|
, b ~ YesodPersistBackend master
|
||||||
|
, Key val ~ AuthId master
|
||||||
|
, PersistStore (b (HandlerT master IO))
|
||||||
|
, PersistEntity val
|
||||||
|
, YesodPersist master
|
||||||
|
, Typeable val
|
||||||
|
)
|
||||||
|
=> HandlerT master IO (Maybe (AuthId master))
|
||||||
|
maybeAuthId = defaultMaybeAuthId
|
||||||
|
|
||||||
credsKey :: Text
|
credsKey :: Text
|
||||||
credsKey = "_ID"
|
credsKey = "_ID"
|
||||||
@ -157,13 +162,41 @@ credsKey = "_ID"
|
|||||||
-- 'maybeAuthIdRaw' for more information.
|
-- 'maybeAuthIdRaw' for more information.
|
||||||
--
|
--
|
||||||
-- Since 1.1.2
|
-- Since 1.1.2
|
||||||
defaultMaybeAuthId :: YesodAuth master
|
defaultMaybeAuthId
|
||||||
=> HandlerT master IO (Maybe (AuthId master))
|
:: ( YesodAuth master
|
||||||
|
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
||||||
|
, b ~ YesodPersistBackend master
|
||||||
|
, Key val ~ AuthId master
|
||||||
|
, PersistStore (b (HandlerT master IO))
|
||||||
|
, PersistEntity val
|
||||||
|
, YesodPersist master
|
||||||
|
, Typeable val
|
||||||
|
) => HandlerT master IO (Maybe (AuthId master))
|
||||||
defaultMaybeAuthId = do
|
defaultMaybeAuthId = do
|
||||||
ms <- lookupSession credsKey
|
ms <- lookupSession credsKey
|
||||||
case ms of
|
case ms of
|
||||||
Nothing -> return Nothing
|
Nothing -> return Nothing
|
||||||
Just s -> return $ fromPathPiece s
|
Just s ->
|
||||||
|
case fromPathPiece s of
|
||||||
|
Nothing -> return Nothing
|
||||||
|
Just aid -> fmap (fmap entityKey) $ cachedAuth aid
|
||||||
|
|
||||||
|
cachedAuth :: ( YesodAuth master
|
||||||
|
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
||||||
|
, b ~ YesodPersistBackend master
|
||||||
|
, Key val ~ AuthId master
|
||||||
|
, PersistStore (b (HandlerT master IO))
|
||||||
|
, PersistEntity val
|
||||||
|
, YesodPersist master
|
||||||
|
, Typeable val
|
||||||
|
) => AuthId master -> HandlerT master IO (Maybe (Entity val))
|
||||||
|
cachedAuth aid = runMaybeT $ do
|
||||||
|
a <- MaybeT $ fmap unCachedMaybeAuth
|
||||||
|
$ cached
|
||||||
|
$ fmap CachedMaybeAuth
|
||||||
|
$ runDB
|
||||||
|
$ get aid
|
||||||
|
return $ Entity aid a
|
||||||
|
|
||||||
setCreds :: YesodAuth master => Bool -> Creds master -> HandlerT master IO ()
|
setCreds :: YesodAuth master => Bool -> Creds master -> HandlerT master IO ()
|
||||||
setCreds doRedirects creds = do
|
setCreds doRedirects creds = do
|
||||||
@ -198,7 +231,7 @@ setCreds doRedirects creds = do
|
|||||||
|
|
||||||
getCheckR :: AuthHandler master TypedContent
|
getCheckR :: AuthHandler master TypedContent
|
||||||
getCheckR = lift $ do
|
getCheckR = lift $ do
|
||||||
creds <- maybeAuthIdRaw
|
creds <- maybeAuthId
|
||||||
defaultLayoutJson (do
|
defaultLayoutJson (do
|
||||||
setTitle "Authentication Status"
|
setTitle "Authentication Status"
|
||||||
toWidget $ html' creds) (return $ jsonCreds creds)
|
toWidget $ html' creds) (return $ jsonCreds creds)
|
||||||
@ -244,26 +277,6 @@ handlePluginR plugin pieces = do
|
|||||||
[] -> notFound
|
[] -> notFound
|
||||||
ap:_ -> apDispatch ap method pieces
|
ap:_ -> apDispatch ap method pieces
|
||||||
|
|
||||||
-- | Retrieves user credentials, if user is authenticated.
|
|
||||||
--
|
|
||||||
-- This is an improvement upon 'maybeAuthIdRaw', in that it verifies that the
|
|
||||||
-- credentials are valid. For example, if a user logs in, receives an auth ID
|
|
||||||
-- in his\/her session, and then the account is deleted, @maybeAuthIdRaw@ would
|
|
||||||
-- still return the old ID, whereas this function would not.
|
|
||||||
--
|
|
||||||
-- Since 1.2.0
|
|
||||||
maybeAuthId :: ( YesodAuth master
|
|
||||||
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
|
||||||
, b ~ YesodPersistBackend master
|
|
||||||
, Key val ~ AuthId master
|
|
||||||
, PersistStore (b (HandlerT master IO))
|
|
||||||
, PersistEntity val
|
|
||||||
, YesodPersist master
|
|
||||||
, Typeable val
|
|
||||||
)
|
|
||||||
=> HandlerT master IO (Maybe (AuthId master))
|
|
||||||
maybeAuthId = fmap (fmap entityKey) maybeAuth
|
|
||||||
|
|
||||||
maybeAuth :: ( YesodAuth master
|
maybeAuth :: ( YesodAuth master
|
||||||
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
, PersistMonadBackend (b (HandlerT master IO)) ~ PersistEntityBackend val
|
||||||
, b ~ YesodPersistBackend master
|
, b ~ YesodPersistBackend master
|
||||||
@ -274,14 +287,8 @@ maybeAuth :: ( YesodAuth master
|
|||||||
, Typeable val
|
, Typeable val
|
||||||
) => HandlerT master IO (Maybe (Entity val))
|
) => HandlerT master IO (Maybe (Entity val))
|
||||||
maybeAuth = runMaybeT $ do
|
maybeAuth = runMaybeT $ do
|
||||||
aid <- MaybeT $ maybeAuthIdRaw
|
aid <- MaybeT maybeAuthId
|
||||||
a <- MaybeT
|
MaybeT $ cachedAuth aid
|
||||||
$ fmap unCachedMaybeAuth
|
|
||||||
$ cached
|
|
||||||
$ fmap CachedMaybeAuth
|
|
||||||
$ runDB
|
|
||||||
$ get aid
|
|
||||||
return $ Entity aid a
|
|
||||||
|
|
||||||
newtype CachedMaybeAuth val = CachedMaybeAuth { unCachedMaybeAuth :: Maybe val }
|
newtype CachedMaybeAuth val = CachedMaybeAuth { unCachedMaybeAuth :: Maybe val }
|
||||||
deriving Typeable
|
deriving Typeable
|
||||||
|
|||||||
@ -189,7 +189,7 @@ postLoginR = do
|
|||||||
|
|
||||||
getPasswordR :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) RepHtml
|
getPasswordR :: YesodAuthEmail master => HandlerT Auth (HandlerT master IO) RepHtml
|
||||||
getPasswordR = do
|
getPasswordR = do
|
||||||
maid <- lift maybeAuthIdRaw
|
maid <- lift maybeAuthId
|
||||||
pass1 <- newIdent
|
pass1 <- newIdent
|
||||||
pass2 <- newIdent
|
pass2 <- newIdent
|
||||||
case maid of
|
case maid of
|
||||||
@ -228,7 +228,7 @@ postPasswordR = do
|
|||||||
when (new /= confirm) $ do
|
when (new /= confirm) $ do
|
||||||
lift $ setMessageI Msg.PassMismatch
|
lift $ setMessageI Msg.PassMismatch
|
||||||
redirect setpassR
|
redirect setpassR
|
||||||
maid <- lift maybeAuthIdRaw
|
maid <- lift maybeAuthId
|
||||||
aid <- case maid of
|
aid <- case maid of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
lift $ setMessageI Msg.BadSetPass
|
lift $ setMessageI Msg.BadSetPass
|
||||||
|
|||||||
@ -192,7 +192,7 @@ getAuthIdHashDB :: ( YesodAuth master, YesodPersist master
|
|||||||
-> Creds master -- ^ the creds argument
|
-> Creds master -- ^ the creds argument
|
||||||
-> HandlerT master IO (Maybe (AuthId master))
|
-> HandlerT master IO (Maybe (AuthId master))
|
||||||
getAuthIdHashDB authR uniq creds = do
|
getAuthIdHashDB authR uniq creds = do
|
||||||
muid <- maybeAuthIdRaw
|
muid <- maybeAuthId
|
||||||
case muid of
|
case muid of
|
||||||
-- user already authenticated
|
-- user already authenticated
|
||||||
Just uid -> return $ Just uid
|
Just uid -> return $ Just uid
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user