Next.js(v14.0.3)客户端适配环境设置BASE_URL的方法
Next.js 14 + AWS Amplify Cognito 环境变量配置问题解答
是的,客户端侧必须用带NEXT_PUBLIC_前缀的环境变量,这是Next.js的核心机制决定的。
Next.js的环境变量规则很明确:不带NEXT_PUBLIC_前缀的变量只会保留在服务端环境中,不会被打包到客户端代码里,所以客户端代码访问这类变量必然返回undefined;只有带NEXT_PUBLIC_前缀的变量才会被注入到客户端打包产物,客户端才能正常读取。
给你具体的实现步骤:
配置环境变量文件
在项目根目录创建对应的环境文件:- 开发环境文件
.env.development:NEXT_PUBLIC_BASE_URL=http://localhost:3000 - 生产环境文件
.env.production:NEXT_PUBLIC_BASE_URL=https://my-prod-site.com
- 开发环境文件
在Amplify Auth配置中使用该变量
修改你的Amplify配置代码,直接引用process.env.NEXT_PUBLIC_BASE_URL:import { Amplify } from 'aws-amplify'; Amplify.configure({ Auth: { Cognito: { userPoolId: '你的用户池ID', userPoolClientId: '你的客户端ID', oauth: { domain: '你的Cognito域名', redirectSignIn: `${process.env.NEXT_PUBLIC_BASE_URL}/auth/callback`, redirectSignOut: `${process.env.NEXT_PUBLIC_BASE_URL}/`, scope: ['email', 'openid'], responseType: 'code' } } } });补充说明:不用担心客户端暴露BASE_URL的安全问题,因为Cognito控制台本身就要求你配置允许的重定向地址列表,只要把开发和生产环境的BASE_URL都加入这个列表,就不会有未授权的重定向风险。
内容的提问来源于stack exchange,提问作者hn719
相关产品推荐
相关产品推荐

