2016-07-04 5 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 
관련 문제