next.js: Cannot run Server Actions in GitHub Codespaces or VSCode Tunnel
Link to the code that reproduces this issue
https://github.com/waki285/Server-Actions-Bug
To Reproduce
- Clone the repository in GitHub Codespaces or VSCode Tunnel.
- Start the server with
next dev
. - Codespaces (or VSCode Tunnel) will automatically perform port forwarding and you can access the launched website through it.
- Click the “Execute Server Actions” button.
- An error will occur.
Current vs. Expected behavior
Expected: Server Actions are executed successfully and no errors occur.
Current: The following error occurs
`false` header with value `********-3000.***.devtunnels.ms` does not match `origin` header with value `localhost:3000` from a forwarded Server Actions request. Aborting the action.
⨯ Error: Invalid Server Actions request.
at AsyncLocalStorage.run (node:async_hooks:346:14)
at AsyncLocalStorage.run (node:async_hooks:346:14)
Verify canary release
- I verified that the issue exists in the latest Next.js canary release
Provide environment information
Operating System:
Platform: linux
Arch: x64
Version: #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022
Binaries:
Node: 20.9.0
npm: 10.2.2
Yarn: N/A
pnpm: 8.10.2
Relevant Packages:
next: 14.0.2-canary.11
eslint-config-next: N/A
react: 18.2.0
react-dom: 18.2.0
typescript: 5.1.3
Next.js Config:
output: N/A
Which area(s) are affected? (Select all that apply)
App Router
Additional context
No response
About this issue
- Original URL
- State: open
- Created 8 months ago
- Reactions: 6
- Comments: 39 (5 by maintainers)
We’ve added an option
experimental.serverActions.allowedOrigins
in #58023 that allows you to add a list of allowed hosts. The reason it throws by default is that this is a layer of cross site request forgery protection.Shu is currently out of office till next week but we’ll add support for wildcard patterns once he’s back.
So Next 14 added some more protection against CSRF attacks. However it caused this problem we’re all running in to. https://github.com/vercel/next.js/pull/57529 allows us to specify a list of allowed forwarded hosts, and it was released in v14.0.2-canary.4
I was able to fix this without messing with the proxy settings (which are configured automatically (and correctly) by apache) by doing the following:
next
to14.0.2-canary.4
upgraded to 14.0.2 and added
solved my problem
None of these options work for me, Next.js seems to ignore the
allowOrigins
property. Is there any other workaround, or even a way to just disable this security feature?I have been able to confirm that this solves the problem.
not work in VSCode Tunnel. I tried both:
error:
This is working for me in Codespaces with Next.js 14.1.0:
@waki285 Sorry but this is not completed: We still cant use wildacrds in allowOrigins.
@timneutkens @meleyal
Following on from this comment using
14.0.3-canary.5
andallowedOrigins
works, note that you are not to includehttp
orhttps
protocols, but just have the domain name.Hopefully there’s some official docs that come with the future releases.
this worked for me
This commit adds wildcard support : https://github.com/vercel/next.js/commit/6fbff29a2e312eee0c129184aee4105b6a186771
Available in canary for now.
BTW, this issue will make the vercel platforms example not work https://demo.vercel.pub/platforms-starter-kit
You can use
process.env.MY_VAR
in your next configThis is affecting me and I’m not even using server actions just route handlers & middleware. Multi tenant saas app. When I dump out the request object headers nextjs seems to be modifying the x-forwarded-host header value and lieing about what it was actually sent as? And this was shipped in a 0.0.1 update? Uhhh…
Reverting to 14.0.1 fixes issue.
@timneutkens any update on wildcard support?
@devraj thanks, but to me the PR seems to only cover a fixed list of origins. See this part of the code :
And I did not see any mention of wildcard support. Did I miss something ?
Not sure if there is any documentation, especially because it is not a full release yet. But you should be able to add this to your
next.config.js
and replacemy-forwarded-host.com
with the full domain (including subdomains) of your website being ran through the proxy:I’m having this issue with a host that is being served behind an apache
ProxyPass
/ProxyPassReverse