Moralis 会话
会话表示用户登录到设备的实例。用户登录或注册时会自动创建会话。当用户注销时,它们会被自动删除。每个用户安装对都有一个不同的 Session
对象;如果用户从他们已经登录的设备发出登录请求,则该用户先前用于该安装的 Session
对象将被自动删除。 Session
对象存储在 Moralis 的 Session
类中,您可以在 Moralis Dashboard Data Browser
上查看它们。我们提供了一组 API 来管理您应用中的 Session
对象。
Session
是 Moralis 对象的子类,因此您可以像在 Moralis 上操作普通对象一样查询、更新和删除会话。因为 Moralis Server
在您登录或注册用户时会自动创建会话,所以您不应手动创建 Session
对象,除非您正在构建“Moralis for IoT
”应用程序(例如 Arduino
或 Embedded C
)。删除会话将使用户退出当前正在使用此会话令牌的设备。
与其他 Moralis 对象不同,Session
类没有云代码触发器。因此,您不能为 Session
类注册 beforeSave
或 afterSave
处理程序。
会话属性
Session 对象具有以下特殊字段:
-
sessionToken
(只读):用于对 Moralis API
请求进行身份验证的字符串令牌。在 Session
查询的响应中,只有您当前的 Session
对象将包含一个会话令牌。 -
user
:(只读)指向此会话所针对的用户对象的指针。 -
createdWith
(只读):有关如何创建此会话的信息(例如 { "action": "login", "authProvider": "password"}
)。 -
action
可以有这些值:login
、signup
、create
或 upgrade
。创建操作是开发人员通过保存 Session
对象手动创建会话。升级操作是当用户从旧会话令牌升级到可撤销会话时。 -
authProvider
可以有这些值:password
、anonymous
、facebook
或 twitter
。 -
expiresAt (readonly)
: 自动删除此 Session
对象的大约 UTC
日期。您可以在应用程序的 Moralis Dashboard
设置页面中配置会话过期设置(1 年不活动过期或无过期)。 -
installationId
(只能设置一次):表示会话登录的安装的字符串。对于 Moralis SDK
,该字段将在用户登录或注册时自动设置。
除
installationId
外的所有特殊字段只能由 Moralis Server
自动设置。您可以将自定义字段添加到 Session
对象,但请记住,任何已登录的设备(带有会话令牌)都可以读取属于同一用户的其他会话
处理无效会话令牌错误
对于可撤销会话,如果从 Moralis 服务器中删除了相应的会话对象,则当前会话令牌可能会变得无效。 如果您实现允许用户从其他设备注销的会话管理器 UI,或者如果您通过云代码、REST API 或数据浏览器手动删除会话,则可能会发生这种情况。 由于自动过期(如果在应用程序设置中配置),会话也可能被删除。 当设备的会话令牌不再对应于 Moralis 服务器上的会话对象时,来自该设备的所有 API 请求都将失败,并显示“Error 209:invalid session token
”。
要处理此错误,我们建议编写一个由所有 Moralis 请求错误回调调用的全局实用函数。 然后,您可以在此全局函数中处理“无效会话令牌”错误。 您应该提示用户再次登录,以便他们可以获得新的会话令牌。 此代码可能如下所示:
function handleMoralisError(err) {
switch (err.code) {
case Moralis.Error.INVALID_SESSION_TOKEN:
Moralis.User.logOut();
// If web browser, render a log in screen
// If Express.js, redirect the user to the log in route
break;
// Other Moralis API errors that you want to explicitly handle
}
}
// For each API request, call the global error handler
query.find().then(function() {
// do stuff
}, function(err) {
handleMoralisError(err);
});
会话安全
会话对象只能由用户字段中指定的用户访问。 所有 Session
对象都有一个只能由该用户读写的 ACL
。 您无法更改此 ACL
。 这意味着查询会话将仅返回与当前登录用户匹配的对象。
当您通过用户登录方法登录用户时,Moralis 将自动在您的 Moralis 服务器中创建一个新的不受限制的 Session
对象。 注册和 Facebook/Twitter 登录也是如此。
您可以为 Session
类配置类级别权限 (CLP
),就像 Moralis 上的其他类一样。 CLP
通过 Session API
限制会话的读取/写入,但不限制 Moralis Server
在用户登录、注册和注销时自动创建/删除会话。 我们建议您禁用应用程序不需要的所有 CLP
。 以下是会话 CLP
的一些常见用例:
-
Find、Delete
- 用于构建 UI 屏幕,允许用户在所有设备上查看他们的活动会话,并在其他设备上注销会话。 如果您的应用没有此功能,您应该禁用这些权限。 -
Create
- 对于从手机应用程序为其他设备提供用户会话的应用程序很有用。 在为移动和 Web 构建应用程序时,您应该禁用此权限。 对于 IoT
应用程序,您应该检查您的 IoT
设备是否确实需要访问用户特定的数据。 如果没有,那么您的 IoT
设备不需要用户会话,您应该禁用此权限。 -
Get、Update、Add Field
——除非您需要这些操作,否则您应该禁用这些权限。