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

Unable to set passport user on Microsoft Edge #106

Open
Elsoberanold opened this issue Nov 1, 2022 · 6 comments
Open

Unable to set passport user on Microsoft Edge #106

Elsoberanold opened this issue Nov 1, 2022 · 6 comments

Comments

@Elsoberanold
Copy link

Elsoberanold commented Nov 1, 2022

This code was tested on Firefox and was able to run as expected, although that was not the case with Microsoft Edge... Server Log shows the following error:

prisma:query SELECT `skedmill-db`.`Session`.`id`, `skedmill-db`.`Session`.`sid`, `skedmill-db`.`Session`.`data`, `skedmill-db`.`Session`.`expiresAt` FROM `skedmill-db`.`Session` WHERE `skedmill-db`.`Session`.`id` = ? LIMIT ? OFFSET ?
prisma:query COMMIT
{"level":30,"time":1667331147320,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-7","res":{"statusCode":302},"responseTime":604.0961999893188,"msg":"request completed"}     
prisma:query INSERT INTO `skedmill-db`.`Session` (`id`,`sid`,`data`,`expiresAt`) VALUES 
(?,?,?,?)
prisma:query ROLLBACK
set(): Error: 
Invalid `this.prisma[this.sessionModelName].create()` invocation in
C:\Users\gfbat\Projects\skedmill-project\node_modules\@quixo3\prisma-session-store\dist\lib\prisma-session-store.js:531:85

  528 case 4:
  529     _a.sent();
  530     return [3 /*break*/, 7];
→ 531 case 5: return [4 /*yield*/, this.prisma[this.sessionModelName].create(
Unique constraint failed on the constraint: 
`Session_sid_key`
{"level":50,"time":1667331147854,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-7","req":{"method":"GET","url":"/api/auth/callback/google?code=4%2F0ARtbsJpFn3xOPQjnClJXTmjasy3fQnnEgzgYpwlYPXWdUyflqoCCrMpKFcqq3Vhyiq2UIQ&scope=email+profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&authuser=0&prompt=none","hostname":"localhost:4000","remoteAddress":"::1","remotePort":65378},"res":{"statusCode":500},"err":{"type":"PrismaClientKnownRequestError","message":"\nInvalid `this.prisma[this.sessionModelName].create()` invocation in\nC:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@quixo3\\prisma-session-store\\dist\\lib\\prisma-session-store.js:531:85\n\n  528 case 4:\n  529     _a.sent();\n  530 
    return [3 /*break*/, 7];\n 531 case 5: return [4 /*yield*/, this.prisma[this.sessionModelName].create(\nUnique constraint failed on the constraint: `Session_sid_key`","stack":"Error: \nInvalid `this.prisma[this.sessionModelName].create()` invocation in\nC:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@quixo3\\prisma-session-store\\dist\\lib\\prisma-session-store.js:531:85\n\n  528 case 4:\n  529     _a.sent();\n  530 
    return [3 /*break*/, 7];\n 531 case 5: return [4 /*yield*/, this.prisma[this.sessionModelName].create(\nUnique constraint failed on the constraint: `Session_sid_key`\n  
  at RequestHandler.handleRequestError (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@prisma\\client\\runtime\\index.js:30873:13)\n    at RequestHandler.request 
(C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@prisma\\client\\runtime\\index.js:30856:12)\n    at PrismaClient._request (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@prisma\\client\\runtime\\index.js:31836:16)","code":"P2002","clientVersion":"4.5.0","meta":{"target":"Session_sid_key"}},"msg":"\nInvalid `this.prisma[this.sessionModelName].create()` invocation in\nC:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@quixo3\\prisma-session-store\\dist\\lib\\prisma-session-store.js:531:85\n\n  528 case 4:\n  529     _a.sent();\n  
530     return [3 /*break*/, 7];\n 531 case 5: return [4 /*yield*/, this.prisma[this.sessionModelName].create(\nUnique constraint failed on the constraint: `Session_sid_key`"}
{"level":40,"time":1667331147899,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-7","err":{"type":"FastifyError","message":"Reply was already sent.","stack":"FastifyError: Reply was already sent.\n    at _Reply.Reply.send (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\reply.js:127:26)\n    at defaultErrorHandler (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\error-handler.js:91:9)\n    at handleError (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\error-handler.js:64:18)\n    at onErrorHook (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\reply.js:699:5)\n    at wrapOnSendEnd (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\reply.js:535:5)\n    at next (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\fastify\\lib\\hooks.js:204:7)\n    at C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@fastify\\session\\lib\\fastifySession.js:181:11\n    
at C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@fastify\\session\\lib\\session.js:171:9\n    at Immediate._onImmediate (C:\\Users\\gfbat\\Projects\\skedmill-project\\node_modules\\@quixo3\\prisma-session-store\\dist\\lib\\utils\\defer.js:16:18)\n  
  at processImmediate (node:internal/timers:466:21)","name":"FastifyError","code":"FST_ERR_REP_ALREADY_SENT","statusCode":500},"msg":"Reply already sent"}
{"level":30,"time":1667331148320,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-8","req":{"method":"OPTIONS","url":"/graphql","hostname":"localhost:4000","remoteAddress":"::1","remotePort":65395},"msg":"incoming request"}
check 2022-11-02T19:32:28.329Z
{"level":30,"time":1667331148325,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-8","res":{"statusCode":204},"responseTime":4.168399810791016,"msg":"request completed"}     
{"level":30,"time":1667331148328,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-9","req":{"method":"POST","url":"/graphql","hostname":"localhost:4000","remoteAddress":"::1","remotePort":65378},"msg":"incoming request"}
{"level":30,"time":1667331148342,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-9","res":{"statusCode":200},"responseTime":13.917999982833862,"msg":"request completed"}    
{"level":30,"time":1667331148358,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-a","req":{"method":"POST","url":"/graphql","hostname":"localhost:4000","remoteAddress":"::1","remotePort":65378},"msg":"incoming request"}
prisma:query SELECT `skedmill-db`.`Profile`.`id`, `skedmill-db`.`Profile`.`createdAt`, `skedmill-db`.`Profile`.`updatedAt`, `skedmill-db`.`Profile`.`biography`, `skedmill-db`.`Profile`.`pseudonym`, `skedmill-db`.`Profile`.`mood`, `skedmill-db`.`Profile`.`userId` FROM `skedmill-db`.`Profile` WHERE `skedmill-db`.`Profile`.`pseudonym` = ? LIMIT ? OFFSET ?
prisma:query SELECT `skedmill-db`.`User`.`id`, `skedmill-db`.`User`.`name`, `skedmill-db`.`User`.`email`, `skedmill-db`.`User`.`emailVerified`, `skedmill-db`.`User`.`image`, `skedmill-db`.`User`.`createdAt` FROM `skedmill-db`.`User` WHERE (`skedmill-db`.`User`.`id` = ? AND 1=1) LIMIT ? OFFSET ?
{ user: null, expires: 2022-11-02T19:32:28.359Z }
prisma:query SELECT `skedmill-db`.`User`.`id`, `skedmill-db`.`User`.`name`, `skedmill-db`.`User`.`email`, `skedmill-db`.`User`.`emailVerified`, `skedmill-db`.`User`.`image`, `skedmill-db`.`User`.`createdAt` FROM `skedmill-db`.`User` WHERE (`skedmill-db`.`User`.`id` = ? AND 1=1) LIMIT ? OFFSET ?
prisma:query SELECT `skedmill-db`.`Profile`.`id`, `skedmill-db`.`Profile`.`createdAt`, `skedmill-db`.`Profile`.`updatedAt`, `skedmill-db`.`Profile`.`biography`, `skedmill-db`.`Profile`.`pseudonym`, `skedmill-db`.`Profile`.`mood`, `skedmill-db`.`Profile`.`userId` FROM `skedmill-db`.`Profile` WHERE `skedmill-db`.`Profile`.`userId` IN (?)
{"level":30,"time":1667331148470,"pid":11324,"hostname":"GFBatista-PC","reqId":"req-a","res":{"statusCode":200},"responseTime":111.06369996070862,"msg":"request completed"}

Prisma schema:

model Session {
    id        String   @id @default(cuid())
    sid       String   @unique
    data      String   @db.Text
    //userId       String
    expiresAt DateTime
    //user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

For this project I've used fastify with @fastify/session plugin

app.register(fastifySession, {
            cookieName: 'user-session',
            secret: 'mysecretmysecretmysecretmysecret',//fs.readFileSync(path.join(__dirname, './../secret-key')),
            resave: false,
            saveUninitialized: false,
            cookie: {
                secure: false,
                //httpOnly: false,
                //path: '/',
                maxAge: 1000 * 60 * 60 * 24 * 1,
                sameSite: 'None'
            },
            store: new PrismaSessionStore(
                prisma,
                {
                    checkPeriod: 2 * 60 * 1000,
                    dbRecordIdIsSessionId: true,
                    //dispose: ,
                    dbRecordIdFunction: undefined
                }
            )
        })

I have checked db with prisma studio and session rows are being created on session table, although passport user is set to null on req.user.

Packages versions:
"prisma": "^4.5.0",
"@prisma/client": "^4.5.0",
"fastify": "^4.9.2",
"@fastify/session": "^10.0.2",
"@fastify/cookie": "^8.3.0",
"@fastify/passport": "^2.2.0",
"@quixo3/prisma-session-store": "^3.1.10"

@kleydon
Copy link
Owner

kleydon commented Nov 4, 2022

@Elsoberanold - Thanks for reporting this. Haven't used Edge or Fastify, so not immediately sure what's going on here...
If the problem persists perhaps you could post a minimal reproduction?
I'm a bit short on time over the near term, but hopefully others can jump in, given an example to test from.

@Elsoberanold
Copy link
Author

@Elsoberanold - Thanks for reporting this. Haven't used Edge or Fastify, so not immediately sure what's going on here...
If the problem persists perhaps you could post a minimal reproduction?
I'm a bit short on time over the near term, but hopefully others can jump in, given an example to test from.

This weekend I will try to post a small example to reproduce this error!

@Elsoberanold
Copy link
Author

@kleydon
I have made an example app that reproduces this error.

https://github.com/Elsoberanold/fastify-passport-session-example

@kleydon
Copy link
Owner

kleydon commented Nov 5, 2022

Thanks @Elsoberanold.

Any prisma-session-store users out there using fastify + passport session, who might have a quick insight on this?

@Rabithua
Copy link

Rabithua commented Jan 31, 2024

mongodb + prisma + passport + nodejs + express

 '  540 case 4:\n' +
    '  541     _a.sent();\n' +
    '  542     return [3 /*break*/, 7];\n' +
    '→ 543 case 5: return [4 /*yield*/, this.prisma[this.sessionModelName].create(\n' +
    `Inconsistent column data: Malformed ObjectID: invalid character 'k' was found at index 0 in the provided hex string: "kUvJl1mpDqEYFkN9X67aCp5mwT-X3TSn" for the field 'id'.`,

I encountered the same error, but I managed to resolve it by modifying the session model.

model Session {
  id        String   @id @map("_id")
  sid       String   @unique
  data      String
  expiresAt DateTime
}

The issue was likely primarily caused by the definition of the id field. In my case, I used id String @id @default(auto()) @map("_id") @db.ObjectId which resulted in the error. After changing it to the definition mentioned above, the error disappeared, and the session could be successfully stored in the database.

@kleydon
Copy link
Owner

kleydon commented Jan 31, 2024

@Rabithua - Thanks for posting this fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants