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
CSRF token validation fails when Parse Dashboard runs behind a load balancer without sticky sessions #3015
When Parse Dashboard is deployed with multiple replicas behind a load balancer that does not provide sticky sessions, login attempts fail with the CSRF error message “CSRF token validation failed. Please refresh the page and try again.” The issue disappears immediately when all requests are routed to a single replica.
Steps to reproduce
Deploy Parse Dashboard (npm package parse-dashboard 8.0.0) together with Parse Server behind Traefik Ingress in a Kubernetes (k3s) cluster.
Set the Parse Dashboard deployment replica count to 2 and use a load balancer without sticky sessions (round-robin).
Access https://<host>/dashboard/login, enter a configured username and password, then submit the form.
Observe the 403 response and the CSRF error message. Refreshing the page sometimes succeeds because the next request may hit the same pod.
Actual Outcome
Browser shows CSRF token validation failed. Please refresh the page and try again. after submitting the login form.
Dashboard pod logs contain EBADCSRFTOKEN entries.
Expected Outcome
Login should succeed, or official documentation should explicitly state that Parse Dashboard requires sticky sessions or a shared session store when running multiple replicas.
If the deployment is scaled down to 1 replica or sticky sessions are enabled (Traefik sticky cookie or Kubernetes sessionAffinity: ClientIP), the issue no longer occurs.
ℹ️ 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.
I think storing sessions in Redis for retrieval would work well, and this way multiple replicas wouldn't be an issue. use dashboard sessionAdapter like cacheAdapter ?
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find session and CSRF-related code in Parse Dashboard
echo "=== Searching for session configuration and middleware ==="
rg -n -C3 "express-session|session\(" --type=js
echo -e "\n=== Searching for CSRF implementation ==="
rg -n -C3 "csrf|CSRF" --type=js | head -100
echo -e "\n=== Looking for cacheAdapter pattern ==="
rg -n -C3 "cacheAdapter" --type=js
echo -e "\n=== Finding main entry points and configuration ==="
fd -e js "index.js|app.js|server.js" | head -10
Length of output: 8229
🏁 Script executed:
#!/bin/bash
# Examine the full Authentication.js file to understand session configuration
echo "=== Full Authentication.js session setup ==="
cat Parse-Dashboard/Authentication.js | head -100
echo -e "\n=== Check package.json for session-related dependencies ==="
cat package.json | jq '.dependencies | with_entries(select(.key | contains("session") or contains("redis") or contains("connect")))'
echo -e "\n=== Look for any existing adapter patterns in the codebase ==="
rg -n "Adapter|adapter" --type=js Parse-Dashboard/ | head -20
Length of output: 3545
🏁 Script executed:
#!/bin/bash
# Check README and documentation for session configuration
echo "=== Searching for session configuration docs ==="
rg -n -i "session|redis" README.md | head -20
echo -e "\n=== Look at the configuration options in index.js ==="
cat Parse-Dashboard/index.js | head -150
echo -e "\n=== Check if there are any examples of passing options ==="
rg -n "cookieSessionSecret|cookieSessionMaxAge" --type=js Parse-Dashboard/
echo -e "\n=== Check express-session documentation for store option ==="
echo "express-session supports a 'store' option for custom session stores"
Length of output: 5779
🏁 Script executed:
#!/bin/bash
# Check how the app.js uses Authentication and passes options
echo "=== Check app.js to understand option flow ==="
cat Parse-Dashboard/app.js | grep -A 20 -B 5 "authInstance.initialize"
echo -e "\n=== Look at complete express-session setup in Authentication.js ==="
sed -n '56,71p' Parse-Dashboard/Authentication.js
echo -e "\n=== Check if there are any configuration examples ==="
fd "example|sample" -e json -e js | head -10
cat parse-dashboard-config.json 2>/dev/null || echo "No example config file found in root"
Length of output: 2360
@mtrezza The root cause of this issue is that Parse Dashboard uses the default in-memory session store (MemoryStore) from express-session, which is not shared across multiple replicas. When the login form loads on one pod (generating a CSRF token) and the POST request hits a different pod, the CSRF validation fails because each pod has its own isolated session storage.
Suggested Fix
Implement a sessionStore configuration option that allows users to provide an external, shared session store (like Redis) for multi-replica deployments. This would involve:
Add support for an optional sessionStore parameter:
constcookieSessionSecret=options.cookieSessionSecret||require('crypto').randomBytes(64).toString('hex');constcookieSessionMaxAge=options.cookieSessionMaxAge;constsessionStore=options.sessionStore;// New optionapp.use(require('express-session')({name: 'parse_dash',secret: cookieSessionSecret,resave: false,saveUninitialized: false,store: sessionStore,// Use provided store or default to MemoryStorecookie: {maxAge: cookieSessionMaxAge,httpOnly: true,sameSite: 'lax',}}));
2. Update Configuration Flow
Modify the following files to pass the sessionStore option:
Parse-Dashboard/index.js - Add CLI option (though users would typically configure this via config file or code)
Parse-Dashboard/server.js (line 165) - Include sessionStore in dashboardOptions
Parse-Dashboard/app.js (line 85) - Pass sessionStore to authInstance.initialize()
3. Documentation Updates
Update README.md to explain:
How to configure Redis for multi-replica deployments
@coderabbitai would it make sense to define an adapter interface and a sessionStorageAdapter option so that aside from redis storage it can support different storage adapters in the future? If is connect-redis already a defined interface and is cross compatible with connect-mongo, etc?
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Search for adapter patterns in Parse Dashboard
echo "=== Looking for adapter patterns in Parse Dashboard ==="
rg -n "Adapter|adapter" --type=js Parse-Dashboard/ -C3 | head -80
echo -e "\n=== Check if Parse Dashboard references Parse Server adapters ==="
rg -n "cacheAdapter" --type=js -C3
echo -e "\n=== Look for any adapter interface definitions ==="
ast-grep --pattern 'class $_ {
$$$
constructor($$$) {
$$$
}
$$$
}' | grep -i adapter -A10 -B2 | head -50
echo -e "\n=== Check README for adapter configuration ==="
rg -n -i "adapter" README.md -C2 | head -40
Length of output: 222
🏁 Script executed:
#!/bin/bash
# Check how Parse Server defines adapters (if referenced in docs or code)
echo "=== Search for Parse Server adapter references ==="
rg -n "parse-server.*adapter|Adapter.*interface" --type=js -C2 | head -40
echo -e "\n=== Look at package.json to see if parse-server is a dependency ==="
cat package.json | jq '.dependencies["parse-server"], .devDependencies["parse-server"], .peerDependencies["parse-server"]'
echo -e "\n=== Check for any existing storage abstraction patterns ==="
fd -e js "Storage|Store" --type=f | head -20
Length of output: 481
🏁 Script executed:
#!/bin/bash
# Research express-session Store interface requirements
echo "=== Check express-session usage in node_modules (if available) or docs ==="
echo "Express-session Store interface typically requires:"
echo "- store.get(sid, callback)"
echo "- store.set(sid, session, callback)"
echo "- store.destroy(sid, callback)"
echo ""
echo "=== Look for any documentation on configuration options ==="
fd "README|CONTRIBUTING|ARCHITECTURE" | xargs grep -l "adapter\|configuration" 2>/dev/null | head -5
Length of output: 291
@mtrezza Great architectural question! After examining the codebase, I'd recommend using the express-session Store interface directly rather than creating a custom adapter interface. Here's my reasoning:
Recommendation: Use express-session Store Directly
Key Finding
Parse Dashboard doesn't currently implement any adapter patterns (unlike Parse Server with its cacheAdapter), so there's no existing pattern to maintain consistency with.
Pros of Using express-session Store Interface:
Zero friction for users - Works immediately with battle-tested libraries like:
connect-redis (most popular)
connect-mongo
memorystore
session-file-store
20+ other compatible stores
No wrapper code needed - Users can drop in any compatible store without writing adapters
Lower maintenance burden - No custom interface to document, version, or evolve
Well-documented ecosystem - Abundant examples and Stack Overflow solutions
Standard interface - The Store interface is stable and proven:
If Parse Dashboard needed Parse-specific features (e.g., integration with Parse Server's auth, custom serialization)
If you wanted to abstract away session storage from express-session entirely for future framework flexibility
If consistency with Parse Server's adapter patterns was a priority
Proposed Implementation:
Simple approach (recommended):
// Parse-Dashboard/Authentication.jsconstsessionStore=options.sessionStore;// Accept any express-session Storeapp.use(require('express-session')({store: sessionStore,// Direct passthrough// ... other options}));
Hybrid approach (if future flexibility matters):
// Accept either express-session Store OR a simple key-value adapterconstsessionStore=options.sessionStore;constsessionStorageAdapter=options.sessionStorageAdapter;if(sessionStorageAdapter){// Wrap simple adapter as express-session StoresessionStore=createStoreFromAdapter(sessionStorageAdapter);}
This keeps it simple now while leaving the door open for a lightweight adapter interface later if Parse-specific needs emerge.
My Recommendation
Start with sessionStore (direct express-session Store), because:
It solves the immediate problem with zero ecosystem friction
Parse Dashboard users likely already have Redis/MongoDB in their stack
You can always add sessionStorageAdapter later if there's demand for a simpler interface
Would you like me to search for how Parse Server implements its adapter pattern to see if there are any learnings we should apply here?
express-session documentation (Session Store implementation). [1]
Connect/express session store guidance (histor reference / examples). [2]
Sources:
[1] express-session docs — Session Store Implementation.
[2] Connect / express-session store notes (store method list and examples).
🌐 Web query:
connect-redis connect-mongo express-session Store compatibility
💡 Result:
Short answer: Both connect-redis and connect-mongo implement an express-session-compatible Store and can be used as the session store for express-session (you pass their Store instance as the session store). connect-redis exposes a RedisStore (new API uses RedisStore / new constructor) and connect-mongo exposes MongoStore (older releases used require(session) pattern; newer releases use MongoStore.create). Both list compatibility with Express/express-session (supporting Express up to v5) and require you to supply an express-session instance when wiring them up. [1][2][3]
Examples / usage patterns:
connect-redis: create a RedisStore and pass it as session({ store: redisStore, ... }). [1]
connect-mongo (v4+): use MongoStore.create(...) and pass that as session store; older v3 used require(session) and new MongoStore(options). [2][3]
#!/bin/bash
# Search for Parse Server adapter patterns in the codebase
echo "=== Looking for Parse Server adapter references in docs ==="
rg -n "parse-server.*[Aa]dapter|[Cc]acheAdapter|[Ss]torageAdapter" README.md -C3 | head -40
echo -e "\n=== Check if Parse Server is imported or referenced ==="
rg -n "require.*parse-server|import.*parse-server" --type=js -C2 | head -20
echo -e "\n=== Look for any adapter documentation or examples ==="
fd -e md | xargs rg -l "adapter|Adapter" 2>/dev/null | head -10
Length of output: 709
@mtrezza Great architectural question! After researching the express-session ecosystem, I have a clear answer:
Yes, connect-redis, connect-mongo, etc. ARE already cross-compatible — they all implement the standardized express-sessionStore interface.
The Store Interface IS the Defined Standard
The express-session Store interface is a well-established specification that requires:
Recommended: touch(sid, session, callback) for session refresh
Optional: all(), clear(), length()
Must be an EventEmitter
Both connect-redis and connect-mongo (and 20+ other stores) implement this exact interface, making them inherently cross-compatible. Users can swap between them without code changes:
Recommendation: Use express-session Store Directly (No Custom Adapter)
Why NOT create a custom sessionStorageAdapter:
It would be redundant — The Store interface already does exactly what you want (abstract storage backends)
Extra maintenance burden — You'd need to:
Define and document the interface
Write wrapper code to translate between your adapter and express-session Store
Keep it compatible as express-session evolves
Users would need to write adapters instead of using existing libraries
No ecosystem benefit — Users already have battle-tested stores; forcing them through a custom adapter adds friction
Parse Dashboard has no adapter precedent — Unlike Parse Server (which has cacheAdapter, storageAdapter), Parse Dashboard doesn't currently use adapter patterns, so there's no consistency to maintain
Proposed Implementation (Simple & Standard):
// Parse-Dashboard/Authentication.jsconstsessionStore=options.sessionStore;// Accept any express-session Storeapp.use(require('express-session')({name: 'parse_dash',secret: cookieSessionSecret,resave: false,saveUninitialized: false,store: sessionStore,// Direct passthrough - works with ANY Storecookie: {/* ... */}}));
Only if you needed Parse-specific functionality like:
Integration with Parse Server's authentication system
Custom session serialization for Parse objects
Shared configuration with Parse Server's cacheAdapter
But for CSRF session storage, the standard Store interface is perfect.
Summary
✅ Use sessionStore option (express-session Store interface)
❌ Don't create custom sessionStorageAdapter
The Store interface already provides exactly what you need: a standardized, cross-compatible abstraction for multiple storage backends. Creating a custom adapter would add complexity without benefit.
Would you like me to draft the implementation PR with this approach?
For best results, initiate chat on the files or code changes.
@mtrezza I appreciate the request, but I'm unable to create pull requests or commit code directly to the repository. However, I can help you in the following ways:
Option 1: Detailed Implementation Guide
I can provide you with:
Complete file-by-file code changes with diffs
Test cases to add
Documentation updates for README.md
Example configuration snippets
Would you like me to prepare this detailed implementation guide?
Option 2: Coordinate with a Maintainer
Since you appear to be a maintainer of this repository, you could:
Create the PR yourself using the implementation details from our discussion
Ask another contributor to implement it
Open this as a "good first issue" for community contributors
Option 3: Help Someone Else Create the PR
If someone volunteers to work on this, I can:
Provide step-by-step implementation guidance
Review their code as they develop
Help with testing strategies
Would you like me to create a detailed implementation plan with all the code changes needed, which you or another contributor can use to create the PR?
For best results, initiate chat on the files or code changes.
@mtrezza I don't support creating PRs or committing code in general — this is a design constraint, not a permissions issue. I'm designed to assist with code review, analysis, and guidance while leaving all repository modifications to human maintainers and contributors as a safety measure.
What I Can Do to Help
I can provide you with a complete implementation package that makes creating the PR straightforward:
Exact code changes for each file with line numbers and diffs
Documentation updates for README.md with usage examples
Suggested test cases (if applicable)
Example configurations for Redis, MongoDB, etc.
Migration notes for existing deployments
This would give you or any contributor everything needed to:
Create a feature branch
Apply the changes
Test locally
Submit the PR
Would you like me to prepare this detailed implementation package? I can structure it so you can essentially copy-paste the changes into the files.
@mtrezza I think this might have introduced a regression. I started getting this CSRF token validation error after upgrading to 8.1.0.
I'd like to not require a redis service just for this since I don't already have one.
If I roll back to 7.X of the Dashboard this configuration works again (which I've been running for years across multiple Dashboard major versions):
export const dashboardOptions = {
allowInsecureHTTP: true, // HTTPS terminated by NGINX so we have to allow this
cookieSessionSecret: process.env.DASHBOARD_COOKIE_SESSION_SECRET, // required when hosted in a clustered environment
trustProxy: 1, // Trust first proxy (required when behind load balancer/nginx)
};
Activity
parse-github-assistant commentedon Nov 10, 2025
🚀 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.
badboy-tian commentedon Nov 10, 2025
I think storing sessions in Redis for retrieval would work well, and this way multiple replicas wouldn't be an issue. use dashboard sessionAdapter like cacheAdapter ?
mtrezza commentedon Nov 20, 2025
@coderabbitai what fix do you suggest for this issue?
coderabbitai commentedon Nov 20, 2025
Tip
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
Length of output: 8229
🏁 Script executed:
Length of output: 3545
🏁 Script executed:
Length of output: 5779
🏁 Script executed:
Length of output: 2360
@mtrezza The root cause of this issue is that Parse Dashboard uses the default in-memory session store (
MemoryStore) fromexpress-session, which is not shared across multiple replicas. When the login form loads on one pod (generating a CSRF token) and the POST request hits a different pod, the CSRF validation fails because each pod has its own isolated session storage.Suggested Fix
Implement a
sessionStoreconfiguration option that allows users to provide an external, shared session store (like Redis) for multi-replica deployments. This would involve:1. Modify
Parse-Dashboard/Authentication.js(lines 60-70)Add support for an optional
sessionStoreparameter:2. Update Configuration Flow
Modify the following files to pass the
sessionStoreoption:Parse-Dashboard/index.js- Add CLI option (though users would typically configure this via config file or code)Parse-Dashboard/server.js(line 165) - IncludesessionStoreindashboardOptionsParse-Dashboard/app.js(line 85) - PasssessionStoretoauthInstance.initialize()3. Documentation Updates
Update
README.mdto explain:connect-redis:sessionStoreis optional; single-instance deployments work without it4. Alternative Short-term Solution
If implementing the sessionStore option is deferred, update documentation to explicitly state that multi-replica deployments require either:
This would set proper expectations until the full fix is implemented.
Benefits of This Approach
express-sessionecosystem patternsexpress-sessionStore interfaceWould you like me to search for more details on implementing any specific part of this solution?
mtrezza commentedon Nov 20, 2025
@coderabbitai would it make sense to define an adapter interface and a
sessionStorageAdapteroption so that aside from redis storage it can support different storage adapters in the future? If is connect-redis already a defined interface and is cross compatible with connect-mongo, etc?coderabbitai commentedon Nov 20, 2025
Tip
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🏁 Script executed:
Length of output: 222
🏁 Script executed:
Length of output: 481
🏁 Script executed:
Length of output: 291
@mtrezza Great architectural question! After examining the codebase, I'd recommend using the
express-sessionStore interface directly rather than creating a custom adapter interface. Here's my reasoning:Recommendation: Use
express-sessionStore DirectlyKey Finding
Parse Dashboard doesn't currently implement any adapter patterns (unlike Parse Server with its
cacheAdapter), so there's no existing pattern to maintain consistency with.Pros of Using
express-sessionStore Interface:Zero friction for users - Works immediately with battle-tested libraries like:
connect-redis(most popular)connect-mongomemorystoresession-file-storeNo wrapper code needed - Users can drop in any compatible store without writing adapters
Lower maintenance burden - No custom interface to document, version, or evolve
Well-documented ecosystem - Abundant examples and Stack Overflow solutions
Standard interface - The Store interface is stable and proven:
When a Custom Adapter Would Make Sense:
express-sessionentirely for future framework flexibilityProposed Implementation:
Simple approach (recommended):
Hybrid approach (if future flexibility matters):
This keeps it simple now while leaving the door open for a lightweight adapter interface later if Parse-specific needs emerge.
My Recommendation
Start with
sessionStore(directexpress-sessionStore), because:sessionStorageAdapterlater if there's demand for a simpler interfaceWould you like me to search for how Parse Server implements its adapter pattern to see if there are any learnings we should apply here?
coderabbitai commentedon Nov 20, 2025
Tip
For best results, initiate chat on the files or code changes.
🧩 Analysis chain
🌐 Web query:
💡 Result:
Summary of the express-session Store interface
References
Sources:
[1] express-session docs — Session Store Implementation.
[2] Connect / express-session store notes (store method list and examples).
🌐 Web query:
💡 Result:
Short answer: Both connect-redis and connect-mongo implement an express-session-compatible Store and can be used as the session store for express-session (you pass their Store instance as the session store). connect-redis exposes a RedisStore (new API uses RedisStore / new constructor) and connect-mongo exposes MongoStore (older releases used require(session) pattern; newer releases use MongoStore.create). Both list compatibility with Express/express-session (supporting Express up to v5) and require you to supply an express-session instance when wiring them up. [1][2][3]
Examples / usage patterns:
Sources:
[1] connect-redis npm README.
[2] connect-mongo npm README (v5+).
[3] connect-mongo GitHub README.
🏁 Script executed:
Length of output: 709
@mtrezza Great architectural question! After researching the express-session ecosystem, I have a clear answer:
Yes,
connect-redis,connect-mongo, etc. ARE already cross-compatible — they all implement the standardizedexpress-sessionStore interface.The Store Interface IS the Defined Standard
The
express-sessionStore interface is a well-established specification that requires:get(sid, callback),set(sid, session, callback),destroy(sid, callback)touch(sid, session, callback)for session refreshall(),clear(),length()Both
connect-redisandconnect-mongo(and 20+ other stores) implement this exact interface, making them inherently cross-compatible. Users can swap between them without code changes:Recommendation: Use
express-sessionStore Directly (No Custom Adapter)Why NOT create a custom
sessionStorageAdapter:It would be redundant — The Store interface already does exactly what you want (abstract storage backends)
Extra maintenance burden — You'd need to:
No ecosystem benefit — Users already have battle-tested stores; forcing them through a custom adapter adds friction
Parse Dashboard has no adapter precedent — Unlike Parse Server (which has
cacheAdapter,storageAdapter), Parse Dashboard doesn't currently use adapter patterns, so there's no consistency to maintainProposed Implementation (Simple & Standard):
Configuration Example (Zero Custom Code):
When Would a Custom Adapter Make Sense?
Only if you needed Parse-specific functionality like:
cacheAdapterBut for CSRF session storage, the standard Store interface is perfect.
Summary
✅ Use
sessionStoreoption (express-session Store interface)❌ Don't create custom
sessionStorageAdapterThe Store interface already provides exactly what you need: a standardized, cross-compatible abstraction for multiple storage backends. Creating a custom adapter would add complexity without benefit.
Would you like me to draft the implementation PR with this approach?
mtrezza commentedon Nov 20, 2025
@coderabbitai open a PR for this feature as you suggested without custom adapter and the new
sessionStoreoption.coderabbitai commentedon Nov 20, 2025
Tip
For best results, initiate chat on the files or code changes.
@mtrezza I appreciate the request, but I'm unable to create pull requests or commit code directly to the repository. However, I can help you in the following ways:
Option 1: Detailed Implementation Guide
I can provide you with:
Would you like me to prepare this detailed implementation guide?
Option 2: Coordinate with a Maintainer
Since you appear to be a maintainer of this repository, you could:
Option 3: Help Someone Else Create the PR
If someone volunteers to work on this, I can:
Would you like me to create a detailed implementation plan with all the code changes needed, which you or another contributor can use to create the PR?
mtrezza commentedon Nov 20, 2025
@coderabbitai are you lacking permissions to create the PR, or do you not support creating PRs in general?
coderabbitai commentedon Nov 20, 2025
Tip
For best results, initiate chat on the files or code changes.
@mtrezza I don't support creating PRs or committing code in general — this is a design constraint, not a permissions issue. I'm designed to assist with code review, analysis, and guidance while leaving all repository modifications to human maintainers and contributors as a safety measure.
What I Can Do to Help
I can provide you with a complete implementation package that makes creating the PR straightforward:
This would give you or any contributor everything needed to:
Would you like me to prepare this detailed implementation package? I can structure it so you can essentially copy-paste the changes into the files.
mtrezza commentedon Nov 20, 2025
@badboy-tian if you could try out #3016 and let me know if it works...
badboy-tian commentedon Nov 20, 2025
@mtrezza how to test the pr. I used to specify
parse-dashboard: xxxxin package.json.mtrezza commentedon Nov 22, 2025
@coderabbitai explain to @badboy-tian how to point a dependency in package.json to an unmerged PR on GitHub.
coderabbitai commentedon Nov 22, 2025
Tip
For best results, initiate chat on the files or code changes.
@badboy-tian To test an unmerged PR from GitHub, you have several options for your
package.json:Method 1: Using Git URL with Branch (Recommended)
{ "dependencies": { "parse-dashboard": "git+https://github.com/parse-community/parse-dashboard.git#session-store" } }Replace
session-storewith the actual branch name from PR #3016.Method 2: Using Git URL with Commit SHA (More Specific)
{ "dependencies": { "parse-dashboard": "git+https://github.com/parse-community/parse-dashboard.git#abc1234567890" } }Replace
abc1234567890with the specific commit SHA from the PR's latest commit.Method 3: Using GitHub Shorthand
{ "dependencies": { "parse-dashboard": "parse-community/parse-dashboard#session-store" } }Steps to Apply:
Find the branch name: Go to PR feat: Add
cookieSessionStoreoption to support multi-replica deployments #3016 and look for the branch name (usually shown near the PR title)Update package.json with one of the formats above
Clear cache and reinstall:
Verify the version:
Example for PR #3016:
If the PR branch is called
session-store, yourpackage.jsonwould look like:{ "dependencies": { "parse-dashboard": "parse-community/parse-dashboard#session-store" } }After testing, you can switch back to the stable version by changing it to:
{ "dependencies": { "parse-dashboard": "^8.0.0" } }Then run
npm installagain.badboy-tian commentedon Nov 23, 2025
work now @mtrezza
parseplatformorg commentedon Nov 23, 2025
🎉 This change has been released in version 8.1.0-alpha.1
parseplatformorg commentedon Dec 1, 2025
🎉 This change has been released in version 8.1.0
chadpav commentedon Dec 5, 2025
@mtrezza I think this might have introduced a regression. I started getting this
CSRF token validationerror after upgrading to 8.1.0.I'd like to not require a redis service just for this since I don't already have one.
If I roll back to 7.X of the Dashboard this configuration works again (which I've been running for years across multiple Dashboard major versions):
mtrezza commentedon Dec 5, 2025
@chadpav Thanks for pointing out, please open a new issue so we can investigate.