You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Error Occurring Using Parse.Cloud.beforeLogin #5998
I'm implementing a check to make sure the user can sign in to the app, but an error occurs while trying to log in to the app.
For the error to occur, the class User must have a column with file and the record must have some file, if null works normally
Steps to reproduce
Cloud implementation code snippet
Parse.Cloud.beforeLogin(asyncrequest=>{const{object: user}=request;if(user.get('deletedAt')){throw'Access denied, you have been banned.';}});
3|AP | Error: Tried to encode an unsaved file. 3|AP | at encode (/home/user/api/parse-api/node_modules/parse/lib/node/encode.js:73:13) 3|AP | at _default (/home/user/api/parse-api/node_modules/parse/lib/node/encode.js:126:10) 3| AP | at ParseUser.toJSON (/home/user/api/parse-api/node_modules/parse/lib/node/ParseObject.js:578:42) 3| AP | at object (/home/user/api/parse-api/node_modules/parse-server/src/triggers.js:540:23) 3| AP | at success (/home/user/api/parse-api/node_modules/parse-server/src/triggers.js:273:14) 3|AP | at <anonymous>
I was checking and an error is occurring on the user who has a file and when doing the code he can't pass this point
Specifically, when encoding a file object with toJSON(), because the object was not expanded, it has no url property and hence cause this block of code to throw an error:
if (value instanceof ParseFile) {
if (!value.url()) {
throw new Error('Tried to encode an unsaved file.');
}
return value.toJSON();
}
Similar to the fix introduced previously (#6001), all we need is to expand file objects before passing them to the trigger runBeforeLoginTrigger in RestWrite.js:
// Cloud code gets a bit of extra data for its objects
const extraData = { className: this.className };
// PROPOSED FIX: expand file objects
this.config.filesController.expandFilesInObject(this.config, userData)
const user = triggers.inflate(extraData, userData);
// no need to return a response
await triggers.maybeRunTrigger(
triggers.Types.beforeLogin,
this.auth,
user,
null,
this.config,
this.context
);
I will prepare a pull request with the proposed fix.
Activity
davimacedo commentedon Aug 30, 2019
Thanks for reporting. This PR should solve this issue: https://github.com/parse-community/parse-server/pull/6001/files
kvnkuang commentedon Aug 20, 2020
Just want to report another issue surrounding this.
When logging in with an Auth provider, the same error occurs if that user has one or more files associated.
I spent some time investigating this problem and found that this error was triggered by this block of code:
parse-server/src/triggers.js
Lines 749 to 764 in 44015c3
Specifically, when encoding a file object with
toJSON(), because the object was not expanded, it has nourlproperty and hence cause this block of code to throw an error:Similar to the fix introduced previously (#6001), all we need is to expand file objects before passing them to the trigger
runBeforeLoginTriggerinRestWrite.js:I will prepare a pull request with the proposed fix.
dplewis commentedon Aug 20, 2020
@kvnkuang Can you open a new issue? We don't want it to get lost.
kvnkuang commentedon Aug 20, 2020
Thanks! Issue created #6871.