使用 Firebase.com 身份验证而不强制用户创建帐户

Use Firebase.com authenication without forcing the user to create an account

我正在开发一个小应用程序以允许用户存储待办事项。我正在使用 Firebase 作为我的后端。 对于第一次迭代,我不希望用户必须注册,但仍然只能看到它自己的数据。我的第一个想法是使用匿名身份验证,存储 UID 并在每次应用程序启动时重用它。这是不可能的,因为会话会在某个时候超时,并且用户下次会获得一个新的 UID。 我当然想确保用户只能使用 Firebase 安全和规则查看自己的项目。

我的想法是像这样保存项目:app.firebase。com/user/123456/todo-item

123456 bee是用户的唯一ID。 我可以自己创建一个唯一标识符并仍然使用 Firebase 安全和规则吗?

You would have to run your own custom authentication solution.

当 Activity 加载时,您必须向您的服务器发出请求。然后在服务器上,您可以在用户加载页面时为用户创建令牌:

// These payload properties are accessible 
// by Security Rules which is awesome
Map<String, Object> payload = new HashMap<String, Object>();
payload.put("uid", "uniqueId1");
payload.put("some", "arbitrary");
payload.put("data", "here");

TokenGenerator tokenGenerator = new TokenGenerator("<YOUR_FIREBASE_SECRET>");
String token = tokenGenerator.createToken(payload);

包不只 Java,所以请阅读文档。

然后当您将令牌返回给用户时,您需要将令牌存储在本地。

存储令牌后,您可以检索它并进行身份验证。

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
ref.authWithCustomToken(AUTH_TOKEN, new Firebase.AuthResultHandler() {
    @Override
    public void onAuthenticationError(FirebaseError error) {
        System.err.println("Login Failed! " + error.getMessage());
    }

    @Override
    public void onAuthenticated(AuthData authData) {
        // authenticated
    }
});

您可能对必须 运行 服务器并不感到兴奋,但请看一下将 Google AppEngine 与 Firebase JVM 客户端一起使用。很简单,帮你维护服务器。

This tutorial by a former Google Cloud tools member, and current Firebase team member is a great place to start.