2017-06-15 1 views
1

Je travaille sur un site Web, et pour me sauver la peine d'une base de données privée, j'ai décidé d'utiliser l'API Google pour authentifier les utilisateurs. J'ai suivi le guide this. J'ai copié le code et pourtant quand je l'exécute et essaye de me connecter, j'obtiens l'écran de google où je choisis le compte pour ouvrir une session avec. Je choisis mon compte et continue à charger pendant un bon bout de temps (je l'ai laissé pendant une demi-heure sans changement). En outre, l'application commence à manger mon bélier (il utilise tout ce qu'il peut de mes 16Go).L'API Google+ ne répond pas lors de la connexion au

Je ne sais pas où cela s'est mal passé. Peut-être que quelqu'un a déjà rencontré cette chose?

Vive

Edit: Voici le code que j'utilise:

{-# LANGUAGE MultiParamTypeClasses #-} 
{-# LANGUAGE OverloadedStrings  #-} 
{-# LANGUAGE QuasiQuotes   #-} 
{-# LANGUAGE TemplateHaskell  #-} 
{-# LANGUAGE TypeFamilies   #-} 

module Main where 

import Data.Default (def) 
import Data.Text (Text) 
import Network.HTTP.Client.Conduit (Manager, newManager) 
import Yesod 
import Yesod.Auth 
import Yesod.Auth.BrowserId 
import Yesod.Auth.GoogleEmail2 

clientId :: Text 
clientId = "" --Removed it for public view 

clientSecret :: Text 
clientSecret = "" --Removed it for public view 

data App = App 
    { httpManager :: Manager 
    } 

mkYesod "App" [parseRoutes| 
/HomeR GET 
/auth AuthR Auth getAuth 
|] 

instance Yesod App where 
    approot = ApprootStatic "http://localhost:3000" 

instance YesodAuth App where 
    type AuthId App = Text 

    loginDest _ = HomeR 
    logoutDest _ = HomeR 

    authPlugins _ = 
     [ authGoogleEmail clientId clientSecret 
     ] 

    authHttpManager = httpManager 

    maybeAuthId = lookupSession "_ID" 

instance RenderMessage App FormMessage where 
    renderMessage _ _ = defaultFormMessage 

getHomeR :: Handler Html 
getHomeR = do 
    maid <- maybeAuthId 
    defaultLayout 
     [whamlet| 
      <p>Your current auth ID: #{show maid} 
      $maybe _ <- maid 
       <p> 
        <a [email protected]{AuthR LogoutR}>Logout 
      $nothing 
       <p> 
        <a [email protected]{AuthR LoginR}>Go to the login page 
     |] 

main :: IO() 
main = do 
    man <- newManager 
    warp 3000 $ App man 

Et voici l'extrait du fichier cabale (je l'utilise pile pour construire l'exécutable):

executable App-exe 
    hs-source-dirs:  app 
    main-is:    Main.hs 
    ghc-options:   -threaded -rtsopts -with-rtsopts=-N 
    build-depends:  base 
        , yesod 
        , yesod-auth 
        , text 
        , http-conduit 
        , data-default 
        , OWTeamQueue 
    default-language: Haskell2010 
+0

Bonjour. Les questions sur stackoverflow sont destinées à être autonomes (elles devraient toujours avoir du sens même si chaque lien de votre question était invalide). Veuillez poster un extrait de code _small_ qui reproduit le problème que vous rencontrez. – Cubic

Répondre

0

Le problème était que je n'ai pas implémenté la fonction getAuthId dans l'instance pour YesodAuth App. Je ne suis pas sûr pourquoi cela n'a pas apparu comme une erreur/avertissement quand je l'ai construit avec la pile.