App Engine的devserver在从UserService,OAuthService或Cloud Endpoints Injection请求用户时提供了哪些用户?
答案 0 :(得分:2)
在端点项目中部署此Api类:
import com.google.api.server.spi.Constant;
import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.appengine.api.oauth.OAuthRequestException;
import com.google.appengine.api.oauth.OAuthServiceFactory;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserServiceFactory;
@Api(clientIds = Constant.API_EXPLORER_CLIENT_ID)
public class AuthEndpoints {
@ApiMethod
public User userFromUserService() {
return UserServiceFactory.getUserService().getCurrentUser();
}
@ApiMethod
public User userFromParameter(User user) {
return user;
}
@ApiMethod
public User userFromOAuthService() throws OAuthRequestException {
return OAuthServiceFactory.getOAuthService().getCurrentUser();
}
}
<强>摘要强>
<强>详情
无身份验证,无OAuth授权
API Explorer OAuth授权(默认凭据)
通过/ _ah / login(默认凭据)登录Devserver
从端点返回null会导致http status = 204.Null是docs的正确端点行为。
如果传入的客户端请求没有授权令牌或无效令牌,则user为null。在您的代码中,您需要检查用户是否为null并执行以下操作之一,具体取决于条件: 1.如果用户非空,请执行授权操作。 2.如果用户为null,则抛出OAuthRequestException。 3.或者,如果用户为空,如果需要某种未经授权的访问,请对未经授权的客户端访问执行某些操作。
OAuthService docs解释返回用户零是预期的行为。
在本地开发服务器上,oauth.getCurrentUser()始终返回一个User对象,其电子邮件设置为“example@example.com”,用户ID设置为0,无论是否发出了有效的OAuth请求。
返回了两个帐户:
{
"email": "example@example.com",
"authDomain": "gmail.com",
"userId": "0",
"nickname": "example@example.com"
}
{
"email": "test@example.com",
"authDomain": "gmail.com",
"userId": "185804764220139124118",
"nickname": "test@example.com"
}
使用appengine-maven-plugin运行这些测试:1.9.21:devserver
<强>结论强>
我回答了自己的问题,但我会问为什么需要这么混乱?
答案 1 :(得分:0)
他们返回的用户对象对应于当前登录的用户
我没有用户登录,他们将返回null
您可以通过重定向到由UserService.createLoginUrl()
回复的网址将用户重定向到登录页面
这在生产和开发服务器中同样有效。唯一的区别是dev服务器不验证用户凭据。它只要求发送电子邮件,不需要密码。