LiveQuery error: protectedFields.forEach is not a function
New Issue Checklist
- [x] I am not disclosing a vulnerability.
- [x] I am not just asking a question.
- [x] I have searched through existing issues.
- [x] I can reproduce the issue with the latest version of Parse Server.
Issue Description
error: Failed running afterLiveQueryEvent on class Message for event create with session r:... with: Error: {"message":"protectedFields.forEach is not a function","code":141}
Steps to reproduce
Run a LiveQuery on class X and then creating+saving a object of class X. E.g. in my case using Swift :
let myClient = ParseLiveQuery.Client()
let lq = myClient.subscribe(queryMessage!)
//... then later ... (much after subscription completes)
let m = Message("hello")
m.saveInBackground { _, error in if error != nil {print(error)} else {print("ok")} }
Actual Outcome
I'm not getting any data in the client from this LiveQuery, and the server says protectedFields.forEach fails. Adding a console.log("protectedFields=",protectedFields) in node_modules/parse-server/lib/Controllers/DatabaseController.js:177 shows protectedFields= { '*': [] } instead of an array, only in this case, whereas it's an array like [] or ["email"] in all other cases (that is, for non-LiveQuery things).
Then I went in Dashboard's Security -> Protected Fields and changed things a bit to see whether the logged value really follows the contents of this form, and so I saw protectedFields= { '*': [ 'stuff', 'moreStuff', 'content' ], authenticated: [ 'otherStuff' ]}. So, when exactly can protectedFields be an array ?
Expected Outcome
No error, and actual LiveQuery results.
Environment
Server
- Parse Server version:
6.3.1and also5.5.6 - Operating system:
Linux - Local or remote host:
Heroku
Database
- System (MongoDB or Postgres):
MongoDB - Database version:
3.6.12 - Local or remote host:
Heroku ObjectRocket
Client
- SDK (iOS, Android, JavaScript, PHP, Unity, etc):
iOS (ParseObjC in Swift) - SDK version:
2.7.0
Logs
succeeding :
protectedFields= []
protectedFields= [ 'email' ]
failing :
protectedFields= { '*': [] }
protectedFields= { '*': [ 'stuff', 'moreStuff', 'content' ], authenticated: [ 'otherStuff' ] }
Thanks for opening this issue!
- 🚀 You can help us to fix this issue faster by opening a pull request with a failing test. See our Contribution Guide for how to make a pull request, or read our New Contributor's Guide if this is your first time contributing.