2016-07-04 6 views
0

ユーザーに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ハンドラーをユーザーが認証された(そして許可された)後にのみアクセスを許可する必要があります。

クッキーが含まれてはいけません。すべてのリクエストがユーザーを再認証します。このように、任意のドメインにサービスを提供できる完全に分離されたサーバーを持つことができます。

基本認証についても同じ質問があります。要旨は次のとおりです。定期ハンドラ内から

+0

私はhttps://hackage.haskell.org/package/yesod-auth-1.2.4/docs/src/Yesodで私のユースケースへの参照を参照してください。それはあなたmodelsで、次の前提としてい-Auth.html#maybeAuthId – amitaibu

答えて

1

を認証するためにどのような答えは、クエリ文字列で渡されたアクセストークンにより、ユーザIDを認証します上記の例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 

を実装しています。

AccessToken 
    created UTCTime default=CURRENT_TIME 
    userId UserId 
    token Text 
    UniqueUserId userId 
    UniqueToken token 
    deriving Eq 
    deriving Show