第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AppEngine 的 datastore.Get() 是否不驗證所請求密鑰的命名空間?

AppEngine 的 datastore.Get() 是否不驗證所請求密鑰的命名空間?

Go
慕森王 2021-07-09 14:11:25
我在 go-appengine 的數(shù)據(jù)存儲中使用命名空間,大致如下:func getThing() *Thing {  nctx := appengine.Namespace(ctx, "whatever")  thing := Thing{}  key, err := datastore.Get(nctx, key, &thing)  if err != nil {    return nil, err  }  return thing, nil}夠簡單了吧?不幸的是,如果事實證明如果 nctx 的命名空間與鍵的命名空間不匹配,它無論如何都會很高興地獲取該對象。AFAICT,沒有辦法手動獲取密鑰的“命名空間”字段以手動驗證它。這對我們的應(yīng)用很重要,因為我們有來自 Web 客戶端的密鑰,在某些極端情況下,這些密鑰可能與錯誤的命名空間相關(guān)聯(lián)。OTOH,如果我使用的鍵作為祖先進行查詢Thing,數(shù)據(jù)存儲(適當(dāng)?shù)兀┓祷劐e誤,因為祖先的命名空間與上下文(形式query namespace is 'bar' but ancestor namespace is 'foo')的命名空間不匹配。我是否遺漏了一些關(guān)于數(shù)據(jù)存儲提取/查詢和命名空間的預(yù)期約束,或者這聽起來像是一個錯誤?
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

我假設(shè)您正在傳遞編碼的密鑰,而不僅僅是它們的 ID?如果您使用創(chuàng)建鍵,datastore.NewKey則傳遞給它的上下文將設(shè)置鍵的命名空間(除非還有父項,在這種情況下將使用命名空間)。

就意圖而言,此行為等效于 python API - 在 上設(shè)置不同的命名空間時,可以獲取從 urlsafe 字符串創(chuàng)建的密鑰namespace_mananger,但如果您僅通過指定創(chuàng)建密鑰,則使用當(dāng)前設(shè)置的命名空間種類和身份。

不過,為命名空間設(shè)置一個 getter 會很好,所以您至少可以在反序列化后進行驗證...


查看完整回答
反對 回復(fù) 2021-07-19
  • 1 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號