2013-08-11 11 views
7

Ich befolgte die Anweisungen in diesem Lernprogramm.Benutzer ist null in Google Cloud API

https://developers.google.com/appengine/docs/java/endpoints/getstarted/auth

, wenn ich meinen Code im Einsatz. und ging, um meine App zu testen.

mit der folgenden URL

http://chandru-compute.appspot.com/_ah/api/explorer

Mein helloworld.greetings.multiply und helloworld.greetings.getGreeting wie erwartet funktioniert.

Aber ich habe Probleme mit der helloworld.greetings.authed Methode.

Das Benutzerobjekt ist immer null.

Hier ist der Code.

package com.google.devrel.samples.helloendpoints; 

import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.config.ApiMethod; 
import com.google.appengine.api.users.User; 
import com.google.appengine.api.users.UserService; 
import com.google.appengine.api.users.UserServiceFactory; 
import javax.inject.Named; 
import java.util.ArrayList; 
/** 
* Defines v1 of a helloworld API, which provides simple "greeting" methods. 
*/ 
@Api(
    name = "helloworld", 
    version = "v1", 
    clientIds = {com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID} 
) 
public class Greetings { 
    public static ArrayList<Greeting> greetings = new ArrayList<Greeting>(); 
    static { 
    greetings.add(new Greeting("hello world!")); 
    greetings.add(new Greeting("goodbye world!")); 
    } 

    public Greeting getGreeting(@Named("id") Integer id) { 
    return greetings.get(id); 
    } 

    @ApiMethod(name = "greetings.multiply", httpMethod = "post") 
    public Greeting insertGreeting(@Named("times") Integer times, Greeting greeting) { 
    Greeting response = new Greeting(); 
    StringBuilder responseBuilder = new StringBuilder(); 
    for (int i = 0; i < times; i++) { 
    responseBuilder.append(greeting.getMessage()); 
    } 
    response.setMessage(responseBuilder.toString()); 
    return response; 
    } 

@ApiMethod(name = "greetings.authed", path = "greeting/authed") 
public Greeting authedGreeting(User user) { 
    //Greeting response = new Greeting("hello " + user.getEmail()); 
    Greeting response; 
    if (user == null) { 
     UserService userService = UserServiceFactory.getUserService(); 
     User user2 = userService.getCurrentUser(); 
     String text = null; 
     if (user2 != null){ 
      text = user2.getEmail(); 
     } 
     response = new Greeting("hello world : Email2" + text); 
    } else { 
     response = new Greeting("hello world : Email " + user.getEmail()); 
    } 
    return response; 
} 

} 

Antwort

1

Ich bekomme das gleiche Problem. Und wenn Sie eine OAuthRequestException Exception werfen und den Dienst über die API Explorer-Konsole testen, erhalten Sie die Nachricht This method requires you to be authenticated. You may need to activate the toggle above to authorize your request using OAuth 2.0. Wenn Sie versuchen, den OAuth 2.0-Toggle zu aktivieren, werden in einem neuen Fenster OAuth 2.0-Bereiche auswählen ausgewählt, und ich konnte nicht feststellen, welche Bereiche erforderlich sind, oder herausfinden, wie ich einen Cloud-Endpunktdienst mit Autorisierung von API-Explorer-Konsole.

+0

wie geht es jetzt? Ich bekomme die gleiche Fehlermeldung. Wie haben Sie es am Ende geschafft, das Problem zu lösen? – Timeless

6

ich gleiche Problem hatte, half es mir

scopes = {"https://www.googleapis.com/auth/userinfo.email"}

in meine Greetings@Api Anmerkung hinzuzufügen. So ist die ganze letzte @Api aussehen wie

@Api(
name = "helloworld", 
version = "v1", 
clientIds = { com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID }, 
scopes = {"https://www.googleapis.com/auth/userinfo.email"} 
) 

Dann einsetzen, laden Seite Api Explorer und schalten Sie auch auf „Anfragen autorisieren OAuth 2.0“ Option mit dem gleichen Umfang.

+6

Für mich hatte ich die 'scopes' gesetzt, aber nicht die API Explorer Client-ID. –

0

Zunächst müssen Sie im API-Explorer die Anforderung mit OAuth unter Verwendung der Autorisierungsanforderungen mithilfe von OAuth 2.0 toggle in der Benutzeroberfläche authentifizieren.

Wenn der Benutzer immer noch NULL-Prüfung ist, dass unter dem Client-IDs gibt die ID für das API-Explorer ist

@Api(
    name = "myAPIName", 
    version = "v1", 
    clientIds = { com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID } 
) 

Dies ist die einzige Sache, die einen nicht null Benutzer Argument zu erhalten benötigt wird.

Verwandte Themen