在本地数据存储区上运行的Google灵活应用引擎春季启动项目在保存实体时提供com.google.cloud.datastore.DatastoreException
Unauthenticated
例外。
{
"timestamp": 1512077140003,
"status": 500,
"error": "Internal Server Error",
"exception": "com.google.cloud.datastore.DatastoreException",
"message": "Unauthenticated.",
"path": "/users"
}
错误说明here表示请求标头没有有效的身份验证标头,但是没有提到放置auth标头的位置。
任何人都面临同样的情况?
答案 0 :(得分:5)
规范错误代码: UNAUTHENTICATED
说明:com.google.cloud.datastore.DatastoreException
只表示该请求没有有效的身份验证凭据。
推荐的操作:如果不解决问题,请勿重试。在这种情况下,您需要再次检查登录凭据。
可在此页面https://cloud.google.com/datastore/docs/concepts/errors#error_codes
找到更多阅读材料<强>解决方案:强>
只需运行gcloud beta auth application-default login
即可。
但我花了半天时间才发现它there。
我认为gcloud init
应该足够了。作为替代方案,您可以通过Google OAuth2使用Google身份验证,但这很难。
答案 1 :(得分:0)
我最终转向了另一个方向。
application.properties
在spring.cloud.gcp.datastore.credentials.location=file://FULL_PATH_TO_THE_CREDENTIALS_FILE
中引用它,并且仍然使用远程数据存储区; src/test/resources/application.properties
# if it exists, comment out or delete the following property:
# spring.cloud.gcp.datastore.credentials.location
# add the following
spring.cloud.gcp.emulator-enabled=true
# if you're not using environment variables, make sure the following property exists
spring.cloud.gcp.project-id=your-project-id
请注意,如果您正在运行集成测试,或者混合使用远程和本地测试,则每个测试可能需要不同的.properties
文件。
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static LocalDatastoreHelper helper;
@BeforeClass
public static void setUpClass() throws IOException, InterruptedException {
logger.info("[Datastore-Emulator] start");
helper = LocalDatastoreHelper.create();
helper.start();
logger.info("[Datastore-Emulator] listening on port {}", helper.getPort());
System.setProperty(DatastoreHelper.LOCAL_HOST_ENV_VAR, "localhost:" + helper.getPort());
}
@AfterClass
public static void cleanUpClass() throws InterruptedException, TimeoutException, IOException {
logger.info("[Datastore-Emulator] stop");
helper.stop();
}
@Before
public void init() throws IOException {
logger.info("[Datastore-Emulator] cleaning data");
helper.reset();
}
这种方法非常适合存储库(org.springframework.cloud.gcp.data.datastore.repository.DatastoreRepository
),但是如果您想直接使用Datastore
,则可以check this。