1

在 Firebase 中,身份验证发生在new Firebase引用上。但是登录发生在new FirebaseAuthClient参考上。

验证用户:

var dataRef = new Firebase('some_firebase_url');
dataRef.auth(auth_token, callback_function);

登录用户:

var authClient = new FirebaseAuthClient(dataRef, callback_function);
authClient.login('password', some_email, some_password, function(error, token, user) {...});

为什么是这样?让所有身份验证/登录/注册功能成为同一类的一部分不是更有意义吗?特别是因为被调用的类FirebaseAuthClient(注意中间的Auth)甚至实际上没有分配给它的身份验证方法?

这让我有点困惑,我希望一些见解可以帮助我更好地理解。

4

2 回答 2

3

这是两者之间的区别以及它们存在于不同类中的原因:

  • Firebase.auth() 是必须调用的“低级”API,以便通过 Firebase 服务器对 Firebase 客户端进行身份验证。您为它提供了一个有效的身份验证令牌,该令牌可能来自多种来源(您可能从后端服务器代码生成它,您可能从像 Singly 之类的第 3 方身份验证提供程序获取它)。

  • FirebaseAuthClient 是Firebase Simple Login的 API ,它是一个与 Firebase 捆绑在一起的简单身份验证服务。到目前为止,这是获得基本身份验证工作的最简单方法(使用 Facebook、Twitter、电子邮件/密码等)。它已经过优化,可以与 Firebase 客户端无缝集成,因此它隐藏了获取身份验证令牌和调用 Firebase.auth() 的详细信息。但这就是它在幕后所做的。您可以将其视为 Firebase.auth() 的包装器。

所以如果你使用简单登录,你只需要使用 FirebaseAuthClient 并且可以忽略 Firebase.auth()。但是对于生成自己的令牌的人(例如,他们可以与现有的用户数据库集成),他们将直接处理 Firebase.auth() 。

于 2013-01-30T03:44:03.347 回答
1

经过进一步阅读和思考,我意识到虽然它仍然在文档中,dataRef.auth但不再需要。创建一个new FirebaseAuthClient基本上取代了它。

最近改动之前,new FirebaseAuthClient没有带回调函数。要进行身份验证,您必须调用dataRef.auth.

现在,当您实例化 a 时new FirebaseAuthClient,就会尝试进行身份验证。以前可用于dataRef.auth回调的信息现在可用于您提供给的新回调new FirebaseAuthClient

然而,它略有不同。dataRef.auth版本是这样的:

dataRef.auth(authtoken, function(success) { ... });

FirebaseAuthClient版本是这样的:

var authClient = new FirebaseAuthClient(dataRef, function(error, user) { ... });

所以在新的做事方法中,你不只是得到一个success布尔值(它被一个对象代替),如果身份验证成功error,你也会得到一个对象。user

在此更改之前,如果用户已成功通过身份验证并且您想获取他们的信息,则必须将其从 localStorage 或其他内容中提取出来。现在它只是在回调中为您提供,这是一个很好的变化。

此外,token过去传递给authClient.login函数的参数现在是用户数据的一部分,如user.firebaseAuthToken.

与此更新密切相关的是对authClient.login工作方式的更改。它不再需要回调,而是触发传递给new FirebaseAuthClient.

实际上,该回调似乎是您需要为任何FirebaseAuthClient更改身份验证状态的函数设置的唯一回调。登录和注销等特定FirebaseAuthClient功能只会更改身份验证状态,并将依赖于原始回调。

此外,您似乎不再需要跟踪用户的 authToken 来对其进行身份验证。过去的情况是authClient.login使用参数调用其回调token,然后您将存储该令牌并将其用于dataRef.auth(token, some_callback),但这不再是必需的,因为dataRef.auth它本身不再是必需的。

所以总而言之,为了回答最初的问题,现在所有的身份验证方法实际上都是同一个类的一部分 - FirebaseAuthClient。dataRef.auth不再需要,尽管它仍在文档中,这令人困惑。

替换dataRef.authnew FirebaseAuthClient,替换dataRef.authauthClient.logoutand 你应该被设置。

非常感谢 Firebase 工作人员就这些声明的有效性提供任何反馈。

于 2013-01-30T03:00:00.627 回答