明天我要进行长途飞行,我希望能够在离线时继续测试我的云端点REST API。问题是User
对象是我的大多数方法的组成部分,我需要一个互联网连接来创建有效的OAuth令牌,以便从客户端(JavaScript)调用它们。
在开发服务器上,无论您登录的是什么帐户,用户始终都是相同的(使用电子邮件example@example.com)。但如果你喂它伪造的令牌,就会抛出一个OAuthRequestException
。
有没有办法可以为dev服务器生成有效的测试令牌,或者在不提供令牌的情况下访问User
对象的方法?
以下是我想在离线时测试的方法示例:
@ApiMethod(name = "hylyts.get")
public Hylyt getHylyt(@Named("url") String url, @Named("id") long id, User user)
throws OAuthRequestException, UnauthorizedException {
return ofy().load().type(Hylyt.class).parent(util.getArticleKey(url, user)).id(id).now();
}
答案 0 :(得分:2)
在云端点中注入自定义Authenticator
类有一些记录的方法。这允许您更改检测到用户的方式。
以下是它的工作原理:
@Api(name = "myapi", version = "v1", authenticators = {MyDummyAuthenticator.class})
public class MyAPI {
@ApiMethod(name = "hylyts.get")
public Hylyt getHylyt(@Named("url") String url, @Named("id") long id, User user)
throws OAuthRequestException, UnauthorizedException {
return ofy().load().type(Hylyt.class).parent(util.getArticleKey(url, user)).id(id).now();
}
}
以下是Authenticator
实施的结果:
public class MyDummyAuthenticator implements Authenticator {
@Override
public User authenticate(HttpServletRequest httpServletRequest) {
return new User("mytestuser@domain.com");
}
}
你当然可以让它更复杂。由于您可以访问HttpServletRequest
,因此您可以通过HTTP标头或类似内容获取用户的电子邮件。
请注意,使用Authenticator
您可以访问本地服务器中的会话,但不能访问生产。在制作中,httpServletRequest.getSession()
将返回null
。这仍然是从数据存储区which I explain here获取会话的技巧。
然后是如何保持正常身份验证解决方案和DummyAuthenticator
实现的问题。我认为你可以链接身份验证器,但我不确定它是如何工作的。在最糟糕的情况下,您可以在航班期间交换Authenticator
实施。