ho definito un API semplice utilizzando Google Cloud Endpoint:Utilizzando Auth con endpoint
@Api(name = "realestate", version = "v1", clientIds = { com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID }, scopes = {
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/userinfo.profile" })
public class RealEstatePropertyV1 {
@ApiMethod(name = "create", path = "properties", httpMethod = HttpMethod.POST)
public void create(RealEstateProperty property, User user)
throws UnauthorizedException {
if (user == null) {
throw new UnauthorizedException("Must log in");
}
System.out.println(user.getEmail());
}
}
poi cerco di testarlo utilizzando il API explorer
. Ho attivato OAuth 2.0. Ma quando eseguo la richiesta, l'oggetto User
è null
.
Jun 23, 2013 10:21:50 AM com.google.appengine.tools.development.DevAppServerImpl start
INFO: Dev App Server is now running
Jun 23, 2013 10:22:42 AM com.google.api.server.spi.SystemServiceServlet init
INFO: SPI restricted: true
Jun 23, 2013 10:22:43 AM com.google.api.server.spi.WebApisUserService getCurrentUser
WARNING: getCurrentUser: clientId not allowed
Jun 23, 2013 10:22:43 AM com.google.api.server.spi.SystemService invokeServiceMethod
INFO: cause={0}
com.google.api.server.spi.response.UnauthorizedException: Must log in
at com.realestate.api.v1.RealEstatePropertyV1.create(RealEstatePropertyV1.java:44)
ho ottenuto il mio token e poi passato al 'oauth2.tokeninfo'. La risposta è "200" con la mia email corretta. La parte 'issued_to' corrisponde al clientId' com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID'. – Sydney
Interessante, sembra che potrebbe essere un bug. Questo comportamento sta accadendo in produzione o in Appserver? È coerente o intermittente? – bossylobster
È solo su app sviluppatore poiché non ho distribuito la mia app sul motore di app. È coerente, posso riprodurlo tutto il tempo. Devo creare un ticket nel tracker degli errori del motore delle app? O hai qualche idea su cosa posso controllare per vedere se è davvero un bug. Non so se è correlato ma ho creato un semplice test usando 'LocalServiceTestHelper' e restituisce sempre' null' quando si chiama 'userService.getCurrentUser()'. Il codice è 'LocalServiceTestHelper helper = new LocalServiceTestHelper (new LocalUserServiceTestConfig()). SetEnvIsAdmin (true) .setEnvIsLoggedIn (true);' – Sydney