GoogleEndpointsJavaOAuth/Oauth2完整示例
阅读大量链接后: 我无法解决服务器端getuser=null的问题。 我需要一个完整的示例服务器端(应用程序引擎java)和客户端(android应用程序)。 在一些链接中,人们会说:将用户保存到数据存储并将其带回。但是我不能保存用户…因为它总是空的GoogleEndpointsJavaOAuth/Oauth2完整示例,java,android,google-app-engine,google-cloud-endpoints,Java,Android,Google App Engine,Google Cloud Endpoints,阅读大量链接后: 我无法解决服务器端getuser=null的问题。 我需要一个完整的示例服务器端(应用程序引擎java)和客户端(android应用程序)。 在一些链接中,人们会说:将用户保存到数据存储并将其带回。但是我不能保存用户…因为它总是空的 package com.example.ismab_000.myapplication.backend; import com.google.api.server.spi.config.Api; import com.google.api.ser
package com.example.ismab_000.myapplication.backend;
import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiNamespace;
import com.google.appengine.api.oauth.OAuthRequestException;
import com.google.appengine.api.oauth.OAuthService;
import com.google.appengine.api.oauth.OAuthServiceFactory;
import com.google.appengine.api.users.User;
import javax.inject.Named;
/**
* An endpoint class we are exposing
*/
@Api( name = "myApi",
version = "v1",
scopes = {Constants.EMAIL_SCOPE},
clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID,Constants.IOS_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE},
namespace = @ApiNamespace(ownerDomain = "backend.myapplication.ismab_000.example.com", ownerName = "backend.myapplication.ismab_000.example.com", packagePath = ""))
public class MyEndpoint {
User user = null;
MyBean response = new MyBean();
String email;
/**
* A simple endpoint method that takes a name and says Hi back
*/
@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name) {
/*
try {
OAuthService oauth = OAuthServiceFactory.getOAuthService();
user = oauth.getCurrentUser();
} catch (OAuthRequestException e) {
// The consumer made an invalid OAuth request, used an access token that was
// revoked, or did not provide OAuth information.
// ...
response.setData("Hola desde Metodo1, " + name);
}
*/
email= user.getEmail();
//response.setData("Hi, " + name + user.getEmail().toString());
response.setData("Hi, desde APYSAYHI...");
return response;
}
@ApiMethod(name = "Metodo1")
public MyBean metodo1(@Named("name") String name) {
response.setData("Hola desde Metodo1, " + name);
return response;
}
@ApiMethod(name = "Metodo2")
public MyBean metodo2(@Named("name") String name) {
response.setData("Hola desde Metodo2, " + name);
return response;
}
}
注意。为了访问用户对象,首先需要将端点配置为使用OAuth。此处有说明: OAuth意味着您需要将项目配置为在定义API时引用的Constants对象下配置正确的客户端ID 然后需要将用户对象添加到端点方法,例如:
@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name, User user) throws OAuthRequestException, IOException {
如果传入的客户端请求没有授权令牌或无效
第一,用户为空。在代码中,您需要检查用户是否
null并根据条件执行以下操作之一:
- 如果用户非空,则执行授权操作
- 如果用户为null,则抛出OAuthRequestException
- 或者,如果用户为空,则如果某种未经授权的访问被禁用,则对未经授权的客户端访问执行一些操作
想要的
假设已生成ClientID(),请确保还更新了Constants.java中的*\u CLIENT\u ID字符串: 如果从maven原型创建项目,则值将显示如下:
public static final String WEB_CLIENT_ID = "replace this with your web client application ID";
public static final String ANDROID_CLIENT_ID = "replace this with your Android client ID";
public static final String IOS_CLIENT_ID = "replace this with your iOS client ID";
我明白了。
只需为客户端ID和WEB ID获取一个新值。
现在的问题是如何在后端获取电子邮件用户。
在端点…用户=null,但始终为example.google.com
谷歌正在努力解决这个问题。目前,无法确定服务器端GAE的用户。谷歌在客户端获得有效的凭证,并向api发出有效的请求……但在端点端,用户总是example.gmail.com。谷歌正在努力解决获取用户的问题。