06.會話Sessions

會話

會話表示登錄到設備的用戶實例。當用戶登錄或注冊時會自動創建會話。當用戶注銷時,它們會自動刪除。每個“user-installation”對都有一個不同的Session對象; 如果用戶從已經登錄的設備發出登錄請求,該用戶Installation上之前的Session對象將被自動刪除。Session對象存儲在Parse上的Session類中,您可以在Parse數據瀏覽器上查看它們。我們提供一組API來管理您應用中的Session對象。

Session是Parse Object的子類,因此您可以以與Parse中操作正常對象相同的方式查詢、更新和刪除sessions。因為Parse Cloud會在您登錄或注冊用戶時自動創建sessions,因此您不應手動創建Session對象,除非您正在構建“Parse IoT”應用程序(如Arduino或Embedded C)。刪除Session將會把正在使用此會話令牌的設備中的用戶注銷掉。

與其他Parse對象不同,Session類沒有Cloud Code觸發器。所以你不能為Session類注冊一個beforeSave或者afterSave處理程序。

1.Session 屬性

Session對象具有以下特殊字段:

  • sessionToken(只讀):用于在Parse API請求上進行身份驗證的字符串令牌。在Session查詢響應中,只有當前Session對象包含一個會話令牌。
  • user:(只讀)指向此會話所用User對象的指針。
  • createdWith(只讀):有關如何創建此會話的信息(例如{ "action": "login", "authProvider": "password"})。
    • action可以有以下值:login,signup,create,或upgrade。create action是指開發者通過存儲Session對象手動創建會話。upgrade action是指用戶從舊會話令牌升級到可撤銷會話。
    • authProvider可以有以下值:password,anonymous,facebook,或twitter。
  • restricted (只讀):此會話是否受限制,為布爾值。
    • 受限的會話沒有對Parse上的User和Session,和Role類的寫入權限。受限的會話也無法讀取不受限的會話。
    • 在用戶登錄/注冊期間,Parse Cloud自動創建的所有會話將不受限制。開發人員從客戶端(僅對“Parse for IoT”應用程序)通過保存一個新的Session對象而手動創建的所有會話都是受限的。
  • expiresAt(只讀):該Session對象將被自動刪除時的大約UTC日期。您可以在應用程序的Parse.com dashboard設置頁面中配置會話過期時間(1年不活動則到期或無過期)。
  • installationId(只能設置一次):表示會話登錄位置的Installation字符串。對于Parse SDK,當用戶登錄或注冊時,該字段將自動設置。除installationId外的所有特殊字段,只能由Parse Cloud自動設置。您可以將自定義字段添加到Session對象中,但請記住,任何已登錄的設備(帶有會話令牌)都可以讀取屬于同一用戶的其他會話(除非您禁用類級權限,請參見下文)。

2.處理無效的session Token錯誤

對于可撤銷會話,如果從Parse Cloud中刪除其對應的Session對象,則當前會話令牌可能無效。如果您實現了一個會話管理器UI可允許用戶在其他設備上注銷,或者手動通過Cloud Code,REST API或數據瀏覽器刪除會話,則可能會發生這種情況。會話也可能由于自動過期(如果在應用設置中配置)被刪除。只要設備的會話令牌不再與Parse Cloud上的Session對象相對應時,來自該設備的所有API請求都將失敗,并顯示“錯誤209:無效的會話令牌”(Error 209: invalid session token)。

為了處理這個錯誤,我們建議您編寫一個由所有Parse請求錯誤回調調用的全局公用函數。然后,您可以在此全局函數中處理“無效會話令牌”錯誤。您應該提示用戶再次登錄,以便他們可以獲得一個新的會話令牌。代碼如下所示:

function handleParseError(err) {
  switch (err.code) {
    case Parse.Error.INVALID_SESSION_TOKEN:
      Parse.User.logOut();
      ... // If web browser, render a log in screen
      ... // If Express.js, redirect the user to the log in route
      break;

    ... // Other Parse API errors that you want to explicitly handle
  }
}

// For each API request, call the global error handler
query.find().then(function() {
  ...
}, function(err) {
  handleParseError(err);
});

3.Session 安全

Session對象只能由用戶字段中指定的用戶訪問。所有Session對象都具有只有該用戶可讀寫的ACL。您不能更改此ACL。這意味著查詢會話只會返回與當前登錄用戶匹配的對象。

當您通過User login方法登錄用戶時,Parse會自動在Parse Cloud中創建一個新的不受限Session對象。注冊操作和Facebook/Twitter登錄時也一樣。

從客戶端SDK手動創建會話對象(創建一個Session實例并保存)始終是受限的。您不能使用對象創建API手動創建一個不受限的會話。

受限會話被禁止創建、修改、或刪除User、Session以及Role類中的任何數據。受限會話也無法讀取不受限的會話。受限會話對于“Parse for IoT”設備(例如Arduino或 Embedded C)很有用,相對移動應用程序,它們很可能運行在不太可靠的物理環境。但是,請記住,受限會話仍然可以讀取User,Session以及Role類的數據,并可以像正常的session一樣讀/寫任何其他類的數據。因此,對于物聯網設備,使其處于安全的物理環境,理想情況下使用加密存儲來保存會話令牌,仍然至關重要。

如果你想防止受限會話修改User、Session或者Role之外的其他類,你可以為該類寫一個Cloud Code beforeSave處理程序:

Parse.Cloud.beforeSave("MyClass", function(request, response) {
  Parse.Session.current().then(function(session) {
    if (session.get('restricted')) {
      response.error('write operation not allowed');
    }
    response.success();
  });
});

您可以像Parse中的其他類一樣為Session類配置類級別權限(CLP)。CLP通過Session API 限制會話的讀取/寫入,但是當用戶登錄,注冊和注銷時,不會限制Parse Cloud的自動會話創建/刪除操作。我們建議您禁用應用程序不需要的所有CLP。以下是會話CLP的常見用例:

  • Find, Delete - 用于構建了UI界面,允許用戶在所有設備上查看其活動會話,并在其他設備上注銷會話。如果您的應用沒有此功能,您應該禁用這些權限。
  • Create - 用于“Parse for IoT”應用程序(例如Arduino或嵌入式C),為除手機應用程序之外的其他設備提供受限的用戶會話。在構建移動和網絡應用程序時,應禁用此權限。對于“Parse for IoT”應用程序,您應該檢查您的IoT設備是否實際需要訪問用戶特定的數據。如果沒有,那么您的IoT設備不需要用戶會話,您應該禁用此權限。
  • Get, Update, Add Field - 除非需要這些操作,否則應禁用這些權限。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 安全 隨著應用程序開發的進行,您將需要使用Parse的安全功能來保護數據。本文檔介紹了如何保護應用程序。 如果您的...
    xiangdong_9013閱讀 959評論 2 1
  • 構建用戶管理微服務翻譯自:https://springuni.com 構建用戶管理微服務(一):定義領域模型和 R...
    極樂君閱讀 1,571評論 0 10
  • 點擊查看原文 Web SDK 開發手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統...
    layjoy閱讀 13,934評論 0 15
  • 還記得我之前準備店長會作業的時候,別人都是特別重視,提前就會把自己將要演講的內容先整理一下,而我每次都不提前準備都...
    城市格調劉姣閱讀 232評論 0 0