正如标题所说,我试图使用谷歌登录在API使用Spring的引导后端服务器,如所描述这里。
只是为了描述上下文,Spring 后端基本上是一个资源+身份验证服务器,它目前通过 Google SSO 或简单的表单登录(类似于此处描述的内容)向包含前端网站的第二个 Spring Boot 应用程序提供 Oauth2 身份验证。
我最初的想法是通过简单地向 android 应用程序提供访问令牌并将其作为“承载”附加到每个请求来模仿@EnableOauth2Sso注释。为此使用用户凭据非常简单:我只是向位于“/oauth/token”的服务器发出请求,使用用户插入的凭据作为身份验证,然后我正确地收到了访问令牌。
现在,我完全不知道如何在 Android 中使用 Google API 构建类似的过程。我之前链接的教程页面描述了如何获取令牌 ID 以及服务器应如何验证它,但之后我不知道该怎么做。
到目前为止,我已经成功地向安全链添加了一个过滤器,它可以像这样简单地检查令牌:
private Authentication attemptOpenIDAuthentication(@NonNull String tokenString){
String clientId = authServices.getClientId();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, factory)
.setAudience(Arrays.asList(clientId, androidClient))
.build();
try {
GoogleIdToken token = verifier.verify(tokenString);
if (token != null) {
return authServices.loadAuthentication(token.getPayload());
} else {
throw new InvalidTokenException("ID token is null");
}
} catch (GeneralSecurityException | IOException e) {
throw …Run Code Online (Sandbox Code Playgroud) spring android spring-boot spring-security-oauth2 google-signin
如标题所述,我正在使用 Firebase 实时数据库,并启用了持久性。
正如指南中所述,
通过启用持久性,Firebase 实时数据库客户端在联机时同步的任何数据都会持久保存到磁盘,并且即使在用户或操作系统重新启动应用程序时也可以脱机使用。这意味着您的应用程序可以像在线一样使用存储在缓存中的本地数据。侦听器回调将继续触发本地更新。
虽然ValueEventListener和每个读取侦听器都会发生这种情况,但我找不到一种方法使其也适用于写入操作。这是我的数据库助手类的片段:
DatabaseReference userRef = root.child("users").child(user.getUid());
userRef.setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
//handle success event
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//handle failure event
}
});
Run Code Online (Sandbox Code Playgroud)
即使启用了持久性,这应该使数据库以“反应式方式”运行,这两个侦听器也不会触发,直到数据库再次上线并最终将更新推送到服务器。
这并不是我真正所希望的,因为我预计一旦数据在本地缓存,该事件就会被触发。我知道我可以简单地忽略这些事件并假装它成功了,但我想知道,我是否错过了什么?有没有办法在数据被缓存后立即触发事件?
android persistence offline firebase firebase-realtime-database