2012-08-10 1 views
2

Je travaille sur un projet d'application google et je me bats un peu avec la bibliothèque java oauth (1.10.1-beta).Oauth: Où obtenir userId pour AuthorizationCodeFlow. createAndStoreCredential?

Je suivis de près: http://code.google.com/p/google-oauth-java-client/wiki/OAuth2#Authorization_code_flow

Le problème est que je ne sais pas où je devrais UsagId USEREMAIL. Je sais qu'il existe une API userinfo mais j'essaie en fait de créer des informations d'identification, donc je ne peux pas accéder à AFIAK.

Mon application fonctionne bien sur localhost (parce que l'utilisateur de [email protected] est toujours là) mais échoue lamentablement lorsqu'elle est déployée dans l'environnement du moteur de google (NullPointerException user.getUserId()).

// we ask for token because we got authCode 
GoogleTokenResponse gTokenResponse = userUtils.getFlow().newTokenRequest(authCode).setRedirectUri(userUtils.getRedirectUri()).execute(); 

//trying to search for user email/id/whatever 
User user = UserServiceFactory.getUserService().getCurrentUser(); 

//user is null -> nullPointerException is thrown 
userUtils.getFlow().createAndStoreCredential(gTokenResponse, user.getUserId()); 

Pourriez-vous s'il vous plaît signaler une faille dans mon cas d'utilisation ou me donner un indice? J'ai beaucoup cherché dans les exemples de SDK, Stackoverflow et ici, mais il n'y a pas beaucoup d'implémentations. PS: Dans la méthode AuthorizationCodeFlow.createAndStoreCredential (...) userId est obligatoire uniquement lorsque vous utilisez un stockage persistant pour les informations d'identification et oui j'utilise cela de sorte que userId ne puisse pas être null dans mon cas.

Merci.

Répondre

0

Vous effectuez OAUTH (autorisation) avant d'identifier votre utilisateur (authentification). Vous devez rediriger votre utilisateur vers la page de connexion quand il est pas connecté:

UserServiceFactory.getUserService().getCurrentUser() == null 

Vous faire en redirigeant l'utilisateur vers la loginUrl:

String loginUrl = userService.createLoginURL(request.getOriginalRef().toString()); 

La prochaine fois que l'utilisateur arrive à votre application , il sera connecté, et vous pouvez demander l'userId.

+0

Mais étant donné que le code s'exécute après que l'utilisateur a accordé l'accès à l'application, dans cette situation, l'application doit savoir qui est connecté au compte google. – Martin85

+0

si UserServiceFactory.getUserService(). GetCurrentUser() == null alors j'ai peur que l'utilisateur ne soit pas connecté à son compte google – koma

Questions connexes