【问题标题】:Middleware "strapi::session": App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])中间件“strapi::session”:需要应用程序密钥。请在 config/server.js 中设置 app.keys (ex: keys: [\'myKeyA\', \'myKeyB\'])
【发布时间】:2022-11-16 06:32:54
【问题描述】:

尝试设置 strapi 和 cloudinary 我看了两个视频,都可以,但是我有一个错误,告诉我为什么?

中间件“strapi::session”:需要应用程序密钥。请设定 config/server.js 中的 app.keys(例如:keys: ['myKeyA', 'myKeyB'])

插件.js

module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: 'cloudinary',
      providerOptions: {
        cloud_name: env('CLOUDINARY_NAME'),
        api_key: env('CLOUDINARY_KEY'),
        api_secret: env('CLOUDINARY_SECRET'),
      },
      actionOptions: {
        upload: {},
        delete: {},
      },
    },
  },
  // ...
});

.env

HOST=0.0.0.0
PORT=1337
CLOUDINARY_NAME="my data"
CLOUDINARY_KEY="my data"
CLOUDINARY_SECRET="my data"
JWT_SECRET=my data

服务器.js

module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
  app: {
    keys: env.array('APP_KEYS'),
  },
});

中间件.js

module.exports = [
  'strapi::errors',
  'strapi::security',
  'strapi::cors',
  'strapi::poweredBy',
  'strapi::logger',
  'strapi::query',
  'strapi::body',
  'strapi::session',
  'strapi::favicon',
  'strapi::public',
];

管理员.js

module.exports = ({ env }) => ({
  auth: {
    secret: env('ADMIN_JWT_SECRET'),
  },
  apiToken: {
    salt: env('API_TOKEN_SALT'),
  },
});

【问题讨论】:

    标签: javascript strapi cloudinary


    【解决方案1】:

    看起来您没有在 .env 文件中定义 APP_KEYS(假设您正在共享完整文件),以及您正在使用 strapi 的内置 env 实用程序访问的其他一些 env 变量。

    在您的.env 中,您应该有一个遵循以下格式的值:

    APP_KEYS=['key1','key2']
    

    您可以从 Strapi 的开发文档中阅读有关环境配置的更多信息: https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#strapi-s-environment-variables

    【讨论】:

    • 为什么在这个视频中他也不使用它youtube.com/watch?v=F2rQPEeL9FU&t=341s 7:20
    • 如果我这样做,我会收到新错误 Missing apiToken.salt。请在 config/admin.js 中设置 apiToken.salt(例如:您可以使用带有 crypto.randomBytes(16).toString('base64') 的 Node 生成一个)。
    • 好的,我刚刚添加了 API_TOKEN_SALT 和 ADMIN_JWT_SECRET 其他所有工作
    【解决方案2】:

    我编写了一个快速的 kotlin 脚本来为 Strapi 生成必要的环境变量。出于安全原因,您应该在本地运行.但是您当然可以在play.kotlin.org 上运行它。您可以将此脚本的输出放入您的.env 文件中。

    import java.security.SecureRandom
    import java.util.Base64
    
    fun main() {
    
        val rnd = SecureRandom()
    
        val appKeys = List(4) {
            val buffer = ByteArray(16)
            rnd.nextBytes(buffer)
            Base64.getEncoder().encodeToString(buffer)
        }
    
        val buffer = ByteArray(16)
        rnd.nextBytes(buffer)
        var jwtSecret = buffer.joinToString("") { String.format("%02x", it) }
        jwtSecret = jwtSecret.substring(0, 8) + "-" + jwtSecret.substring(8, 12) + "-" + jwtSecret.substring(12, 16) + "-" + jwtSecret.substring(16)
    
        rnd.nextBytes(buffer)
        val apiTokenSalt = buffer.joinToString("") { String.format("%02x", it) }
    
        println("APP_KEYS=" + appKeys.joinToString(","))
        println("JWT_SECRET=$jwtSecret")
        println("API_TOKEN_SALT=$apiTokenSalt")
    }
    
    

    【讨论】:

      【解决方案3】:

      要解决此问题,请创建一个 .env 文件,该文件应该是 .env.example 的副本。根据您的 Strapi 版本,您可能需要添加更多环境变量。然后在终端中使用Node运行crypto.randomBytes(16).toString('base64')命令,运行命令后你会得到一个生成的密钥用于.env

      这是一个有效的 .env 文件的示例,只需将 generatedKey 与您的加密密钥交换即可。

      HOST=0.0.0.0
      PORT=1337
      APP_KEYS=['generatedKey1', 'generatedKey2']
      JWT_SECRET=generatedKey3
      API_TOKEN_SALT=generatedKey4
      ADMIN_JWT_SECRET=generatedKey5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-20
        • 2018-12-14
        • 1970-01-01
        • 2018-05-31
        • 2021-05-19
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多