egg报错:Please set config.keys first
发布于 7 年前 作者 dangyanglim 14332 次浏览 来自 问答

我加了一个跨域中间件

middleware/cors.js
module.exports = require('koa-cors');

config.default.js
module.exports = {
  // 配置需要的中间件,数组顺序即为中间件的加载顺序
  middleware: [ 'cors' ],
};

登录 http://127.0.0.1:7001/user/login?username=3

Error: Please set config.keys first
    at Application.get keys [as keys] (D:\lyq5655779.managementsystem\trunk\manage\node_modules\egg\lib\application.js:181:15)
    at Object.get cookies [as cookies] (D:\lyq5655779.managementsystem\trunk\manage\node_modules\egg\app\extend\context.js:17:65)
    at Object.get [egg-security#CSRF_SECRET] (D:\lyq5655779.managementsystem\trunk\manage\node_modules\egg-security\app\extend\context.js:76:32)
    at Object.ensureCsrfSecret (D:\lyq5655779.managementsystem\trunk\manage\node_modules\egg-security\app\extend\context.js:87:13)
    at Object.csrf (D:\lyq5655779.managementsystem\trunk\manage\node_modules\egg-security\lib\middlewares\csrf.js:13:10)
    at csrf.next (<anonymous>)
    at Object.<anonymous> (D:\lyq5655779.managementsystem\trunk\manage\node_modules\koa-compose\index.js:28:19)
    at Generator.next (<anonymous>)
    at onFulfilled (D:\lyq5655779.managementsystem\trunk\manage\node_modules\co\index.js:65:19)
    at D:\lyq5655779.managementsystem\trunk\manage\node_modules\co\index.js:54:5
18 回复

原因写的很清楚了,在 config.default.js 里面配置下 config.keys 即可

@atian25 我有配了吧

你需要学习下 node 的基础知识…

你这里写了两个 module.exports ,互相覆盖了啊

// config/config.default.js
module.exports = appInfo => {
  const config = {};
  config.keys = '写一个随机数,不要告诉别人哈';
  config.middleware = [ 'cors' ];
  return config;
};

@atian25 可以了,谢谢,嗯,基础比较差

untitled1.png

不好意思,你的这段代码还是错的。。。。 正确的我贴在上面了。

@dangyanglim 去买本 @朴老师 的「深入浅出 Node.js」 学习下吧。

@atian25 你们是不是做了个 cnodejs 的监控。。。一有 egg 的关键字就提醒你们。。。。。

@atian25 嗯,我看过一些书,还是理解不深,我觉得多实践才可能好点。 untitled1.png

csrf问题解决,但先有了另一个问题egg-security不允许前端用options的方式请求,返回405 Method Not Allowed, 我前端用post的,但是不知道为什么浏览器调试那里显示options untitled2.png

@ngot 感觉egg.security是不是屏蔽options了 untitled1.png

untitled2.png

这里已经被我屏蔽掉了,还是不行

修改,因为修改的库文件所以重启之后就可以了,貌似就是因为这里把options排除了? untitled2.png

untitled1.png

@atian25

egg-security/lib/middlewares/methdnoallow.js里把options排除了, 但是cors跨域不是一定要用options吗? 我直接改了这句话就可以跨域了如下图。 另外,这样 config.security={ enable:false, } 貌似不可以屏蔽掉egg.security插件

改库文件要重启服务器才能生效,我刚刚没有重启

可以跨域了

untitled2.png

解决了,methdnoallow false From Noder

不要改库,有配置的在应用配置中覆盖

回到顶部