Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Schema mismatch for _Session.createdWith #32

Closed
nirco123 opened this issue Jan 29, 2016 · 27 comments
Closed

Schema mismatch for _Session.createdWith #32

nirco123 opened this issue Jan 29, 2016 · 27 comments
Labels
type:bug Impaired feature or lacking behavior that is likely assumed

Comments

@nirco123
Copy link

When I am trying to login using the local parse-server and migrated mongoDB (on MongoLab), I am getting the following:
{"code":111,"error":"schema mismatch for _Session.createdWith; expected map but got object"}

please advice.

@jsoendermann
Copy link

I get the same error.

@rebelchris
Copy link

Subscribing: Same here
Edit: Using JS SDK

@fraxool
Copy link

fraxool commented Jan 29, 2016

Same here with iOs SDK.

@gfosco gfosco added the type:bug Impaired feature or lacking behavior that is likely assumed label Jan 29, 2016
@gfosco
Copy link
Contributor

gfosco commented Jan 29, 2016

Will take a look at this.

@hafizapp
Copy link

[Error]: schema mismatch for _Session.createdWith; expected map but got object (Code: 111, Version: 1.12.0)
Yes same here for iOS app, any one have luck to get it working...

@hmoqhim
Copy link
Contributor

hmoqhim commented Jan 29, 2016

Same thing here. iOS SDK

@poseidonsw
Copy link

I'm getting the same error using the JS SDK

I noticed in mongoDB in _Schema it is expecting a map when it should be an object. Must have happened in the migration tool. I changed it to object and got passed this problem. Now it seems to be complaining about expiresAt being a number when it expected a date.

Update: What worked for me in your migrated MongoDB in _SCHEMA:_session, change createdWith value to object and expiresAt value to string

then in parse-server/transform.js after line 44 ad a case for expiredAt to transform it to a iso date format for the database:

case 'expiresAt':
case '_expires_at':
  key = 'expiresAt';
  timeField = true;
  break;

finally in parse-server/users.js prior to line 58 I created an expireDate and added a year to it:

var expiresAt = new Date();
expiresAt.setFullYear(expiresAt.getFullYear() + 1);

finally line 70 I change:

expiresAt: 0,

to:

expiresAt: Parse._encode(expiresAt).iso,

@natanrolnik
Copy link
Contributor

I've just deployed the parse server for my app in development, and when trying to login or create a new user account (iOS SDK), I'm getting the same error.

@gfosco
Copy link
Contributor

gfosco commented Jan 30, 2016

Can you open the _SCHEMA collection in your mongo installation, and paste the value for the _Session object?

@poseidonsw
Copy link

@gfosco this was mine right out of the migrate tool before I made the changes I posted above.

{
"_id" : "_Session",
"_metadata" : {
    "class_permissions" : {
        "get" : {
            "*" : true
        },
        "find" : {
            "*" : true
        },
        "update" : {
            "*" : true
        },
        "create" : {
            "*" : true
        },
        "delete" : {
            "*" : true
        },
        "addField" : {
            "*" : true
        },
        "readUserFields" : [],
        "writeUserFields" : []
    }
},
"user" : "*_User",
"installationId" : "string",
"restricted" : "boolean",
"expiresAt" : "date",
"createdWith" : "map",
"sessionToken" : "string",
"updatedAt" : "string",
"createdAt" : "string",
"objectId" : "string"
}

@gfosco
Copy link
Contributor

gfosco commented Jan 30, 2016

Merged #87 which should address all of this. Will tag a new release. 2.0.2

@gfosco gfosco closed this as completed Jan 30, 2016
@h4rm
Copy link

h4rm commented Jan 31, 2016

Hi Fosco,
the recent changes have not solved the problem for me. Still getting schema mismatch for _Session.createdWith; expected map but got object as a response to a login. I have upgraded to 2.0.2 on my Heroku instance using the MongoLab MongoDB as described in the migration guide.
Other GET requests for example get through as expected though.

@natanrolnik
Copy link
Contributor

@vection take a look at @poseidonsw first comment. There may be a bug in the migration tool, and in the _Session schema you need to change:

"createdWith": "object"

from a map to an object.
Also, I needed to change the expiresAt field from date to string in order for this to work.

@gfosco
Copy link
Contributor

gfosco commented Jan 31, 2016

Caught that in #87 just now (should allow it to stay as "map" in the schema)... can you try the current master? This doesn't change anything with 'expiresAt', still need more info on the best way to fix that if still a problem.

@h4rm
Copy link

h4rm commented Jan 31, 2016

Yes, I already tested it with the current master (2.0.2).
Doing the changes to _SCHEMA:_session (change createdWith value to object and expiresAt value to string) worked however.

@poseidonsw
Copy link

@gfosco I can clean up my change for expiresAt and send it as a PR. It sets the expiresAt a year in advance similar to what parse.com api does. You do still need to change it in the _SCHEMA:_Session from date to string, but that would make it consistent with the other dates in the _SCHEMA collection

@jpv123
Copy link

jpv123 commented Jan 31, 2016

I'm sorry, I don't understand. Was it solved on 2.0.2? I'm having also the same problem

@gfosco
Copy link
Contributor

gfosco commented Jan 31, 2016

Should be in 2.0.3

On Saturday, January 30, 2016, jpv123 notifications@github.com wrote:

I'm sorry, I don't understand. Was it solved on 2.0.2? I'm having also the
same problem


Reply to this email directly or view it on GitHub
#32 (comment)
.

@hafizapp
Copy link

Till now it's same thing, please fix ..

[Error]: schema mismatch for _Session.expiresAt; expected date but got string (Code: 111, Version: 1.12.0)

@gfosco

@natanrolnik
Copy link
Contributor

@hafizapp to fix that, open your schema in your mongodb, and find the _Session object. There, you should change expiresAt from date to String.

@gfosco
Copy link
Contributor

gfosco commented Jan 31, 2016

Yeah, that will fix it, but we do need to add something in parse-server to
handle this scenario cleanly without having to edit the schema.

On Sun, Jan 31, 2016 at 12:52 AM, Natan Rolnik notifications@github.com
wrote:

@hafizapp https://github.com/hafizapp to fix date, open your schema in
your mongodb, and find the _Session object. There, you should change
expiresAt from date to String.


Reply to this email directly or view it on GitHub
#32 (comment)
.

@fraxool
Copy link

fraxool commented Jan 31, 2016

@gfosco should we wait for the fix or can we change the expiresAt from date to string now and continue the development from here ? I mean, if we change the mongodb schema, will we have some issues with the next updates of parse-server ?

@hafizapp
Copy link

@natanrolnik Thanks, It fixed. but it would be more helpful if we get the answer of @fraxool question.

@natanrolnik
Copy link
Contributor

@hafizapp definitely

@rebelchris
Copy link

I did change to 2.0.3 and changed expiresAt from date to string

It seems to work, but the js sdk gives me the following error:
Uncaught Error: Tried to encode an unsaved file.

File parse-1.6.7.min.js:9164
I'm guessing it has something to do with this issue? since it was working before..

@joeyslack
Copy link

I'm getting issues with expiredAt. Is it still valid for me to change my schema, to convert expiresAt from Date type (iso) to String?

@drew-gross
Copy link
Contributor

Sure, but I'd recommend you try that on a dev DB before doing it in your prod DB. Can you also open a new issue describing how you got into this situation? (Was this a migrated DB, or a new one? Does your app use revocable sessions? etc.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type:bug Impaired feature or lacking behavior that is likely assumed
Projects
None yet
Development

No branches or pull requests