7

このチュートリアルの指示に従いました。

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

コードをデプロイしたとき。そして私のアプリをテストしに行きました。

次のURLで

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

私の helloworld.greetings.multiply と helloworld.greetings.getGreeting は期待どおりに動作します。

しかし、helloworld.greetings.authed メソッドに問題があります。

ユーザー オブジェクトは常に null です。

これがコードです。

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;
 }

}
4

3 に答える 3

6

私は同じ問題を抱えていました。追加するのに役立ちました

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

私のGreetings @Api注釈に。したがって、最終的な全体は次の@Apiようになります

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

次に、デプロイし、Api Explorer ページをリロードし、同じスコープで「OAuth 2.0 を使用してリクエストを承認する」オプションをオンにします。

于 2013-08-24T07:08:57.080 に答える