作為 SQL 新手,我正在編寫(xiě)一個(gè) API 中間件作為練習(xí),用于檢查某些標(biāo)頭中包含的信息是否與數(shù)據(jù)庫(kù)條目匹配(“基于令牌的身份驗(yàn)證”)。數(shù)據(jù)庫(kù)訪問(wèn)基于GORM.為此,我將我的 ORM 定義如下:type User struct { ID uint UserName string Token string}在我的中間件中,我檢索相關(guān)標(biāo)頭的內(nèi)容并以變量userHeader和tokenHeader. 它們應(yīng)該與數(shù)據(jù)庫(kù)匹配以進(jìn)行身份驗(yàn)證。該user表只有一個(gè)條目:select * from users // 1,admin,admintoken驗(yàn)證碼是 var auth User res := db.Where(&User{UserName: userHeader, Token: tokenHeader}).Find(&auth) if res.RowsAffected == 1 { // authentication succeeded }對(duì)此進(jìn)行測(cè)試時(shí),我得到以下兩個(gè)不正確的結(jié)果(其他組合是正確的):只有一個(gè)標(biāo)頭設(shè)置為正確的值(另一個(gè)不存在),身份驗(yàn)證成功(添加具有不正確值的另一個(gè)標(biāo)頭是可以的(=auth 失?。](méi)有設(shè)置標(biāo)題→身份驗(yàn)證通過(guò)我希望我的查詢意味著(在上述不正確結(jié)果的情況下) select * from users where users.user_name = 'admin' and users.token = '' select * from users where users.user_name = '' and users.token = ''并且此查詢?cè)诳刂婆_(tái)上是正確的,即產(chǎn)生零結(jié)果(針對(duì)數(shù)據(jù)庫(kù)運(yùn)行)。然而,ORM 似乎丟棄了不存在的標(biāo)題并假設(shè)它們很好(這至少是我的理解)我還嘗試通過(guò)鏈接Where子句db.Where(&User{UserName: userHeader}).Where(&User{Token: tokenHeader}).Find(&auth) 但結(jié)果是一樣的。正確的查詢應(yīng)該是什么?
gorm 是否使用邏輯 OR 解釋結(jié)構(gòu)的內(nèi)容?
料青山看我應(yīng)如是
2022-11-08 16:33:45