我希望用户能够访问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。每个请求都将重新授权用户。像这样,我们可以拥有一个完全分离的服务器,可以服务于任意域。
也可以询问有关基础身份验证的相同问题。要点是:如何从常规处理程序
内部进行身份验证答案 0 :(得分:1)
答案是实施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