codecamp

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​——除非您需要这些操作,否则您应该禁用这些权限。


Moralis 其他对象的安全性
Moralis 转移ETH
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Moralis 文件

Moralis 工具

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }