通过任何处理程序上的访问令牌/基本身份验证来验证用户
Authenticate user by access token/ base auth on any handler
我希望用户能够访问 RESTful 服务器并使用查询字符串中的访问令牌进行身份验证。例如https://api.example.com/v1.0/articles?access_token=1234
我在models
文件中定义了:
AccessToken
created UTCTime default=CURRENT_TIME
userId UserId
token Text
UniqueUserId userId
UniqueToken token
deriving Eq
deriving Show
每次创建用户时,我们都会为他们分配一个唯一的令牌。
问题是如何为每个处理程序即时进行身份验证。因此,例如,我将有一个 ArticlesR
处理程序,只有在用户通过身份验证(因此也被授权)后才允许访问。
不应该涉及cookie。每个请求都会重新授权用户。像这样我们可以有一个完全解耦的服务器,可以服务于任意域。
关于基本身份验证也可以问同样的问题。要点是:如何从 regular handler
内部进行身份验证
答案在于实施maybeAuthId
import Database.Persist.Sql (toSqlKey)
instance YesodAuth App where
maybeAuthId = do
mToken <- lookupGetParam "access_token"
case mToken of
Nothing -> return Nothing
Just token -> do
mUser <- runDB $ selectFirst [AccessTokenToken ==. token] []
case mUser of
Nothing -> return Nothing
Just user -> return $ Just . accessTokenUserId $ entityVal user
以上示例将通过查询字符串中传递的访问令牌对用户 ID 进行身份验证。它假定您的 models
中包含以下内容:
AccessToken
created UTCTime default=CURRENT_TIME
userId UserId
token Text
UniqueUserId userId
UniqueToken token
deriving Eq
deriving Show
我希望用户能够访问 RESTful 服务器并使用查询字符串中的访问令牌进行身份验证。例如https://api.example.com/v1.0/articles?access_token=1234
我在models
文件中定义了:
AccessToken
created UTCTime default=CURRENT_TIME
userId UserId
token Text
UniqueUserId userId
UniqueToken token
deriving Eq
deriving Show
每次创建用户时,我们都会为他们分配一个唯一的令牌。
问题是如何为每个处理程序即时进行身份验证。因此,例如,我将有一个 ArticlesR
处理程序,只有在用户通过身份验证(因此也被授权)后才允许访问。
不应该涉及cookie。每个请求都会重新授权用户。像这样我们可以有一个完全解耦的服务器,可以服务于任意域。
关于基本身份验证也可以问同样的问题。要点是:如何从 regular handler
内部进行身份验证答案在于实施maybeAuthId
import Database.Persist.Sql (toSqlKey)
instance YesodAuth App where
maybeAuthId = do
mToken <- lookupGetParam "access_token"
case mToken of
Nothing -> return Nothing
Just token -> do
mUser <- runDB $ selectFirst [AccessTokenToken ==. token] []
case mUser of
Nothing -> return Nothing
Just user -> return $ Just . accessTokenUserId $ entityVal user
以上示例将通过查询字符串中传递的访问令牌对用户 ID 进行身份验证。它假定您的 models
中包含以下内容:
AccessToken
created UTCTime default=CURRENT_TIME
userId UserId
token Text
UniqueUserId userId
UniqueToken token
deriving Eq
deriving Show