eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.89k stars 1.82k forks source link

关于在typescript使用passport-local的问题 #3134

Closed lvao813 closed 5 years ago

lvao813 commented 5 years ago

我的版本为: Node Version:v10.11.0 "egg": "^2.6.1", "egg-passport": "^2.0.1", "passport-local": "^1.0.0",

以下是我的代码: plugin.ts

`import { EggPlugin } from 'egg';

const plugin: EggPlugin = { static: true, passport: { enable: true, package: 'egg-passport', },

};

export default plugin;`

app.ts

`import { Application } from 'egg'; import * as mongoose from 'mongoose'; const LocalStrategy = require('passport-local').Strategy; import 'reflect-metadata'; export default (app: Application) => { app.beforeStart(async () => { try { mongoose.connect("mongodb://test:123456@127.0.0.1:27017/test"); console.log('初始化成功'); } catch (error) { console.log(error); }

    // console.log('appstart');
});
app.passport.use(new LocalStrategy({
    passReqToCallback: true,
  }, (req, username, password, done) => {
    // format user
    const user = {
      provider: 'local',
      username,
      password,
    };
    debug('%s %s get user: %j', req.method, req.url, user);
    app.passport.doVerify(req, user, done);
  }));

  // 处理用户信息
  app.passport.verify(async (ctx, user) => {});
  app.passport.serializeUser(async (ctx, user) => {});
  app.passport.deserializeUser(async (ctx, user) => {});
// console.log('appstart');

}; ` 其中app.passport.use中的passport会报错误:[ts] 类型“Application”上不存在属性“passport”。 也无法运行,请问有typescript的关于passport的任何例子或代码片段吗? 我是否忽略了某些重要的配置项? 谢谢!

whxaxes commented 5 years ago

因为 egg-passport 这个插件暂时没有提供 ts 的声明文件,欢迎 PR :https://github.com/eggjs/egg-passport

lvao813 commented 5 years ago

因为egg-passport这个插件暂时没有提供ts的声明文件,欢迎PR:https//github.com/eggjs/egg-passport

感谢你的回复,我试试看用koa-passport-ts来做吧

lvao813 commented 5 years ago

我解决了这个问题,说简单也简单,当出现“[ts] 类型“Application”上不存在属性“passport””的时候,选中passport这个单词,之后vs code会提示你添加引用 image点击一下“添加索引签名”会在egg的index.d.ts里添加一行代码,之后就神奇的成功了: image

希望官方能把这个东西集成进去,不然我们还是要纠结是否改源码的问题

whxaxes commented 5 years ago

@lvao813 不要这么做,你这么做,是直接改到了 node_modules 下 ,没用的。

如何给插件添加声明:https://eggjs.org/zh-cn/tutorials/typescript.html#%E6%8F%92%E4%BB%B6

tips: 建议先系统的学一下 typescript ,不要为了用而用

lvao813 commented 5 years ago

@lvao813 不要这么做,你这么做,是直接改到了 node_modules 下 ,没用的。

如何给插件添加声明:https://eggjs.org/zh-cn/tutorials/typescript.html#%E6%8F%92%E4%BB%B6

tips: 建议先系统的学一下 typescript ,不要为了用而用

感谢你的教诲,我确实对typescript的了解还不深,感谢你指出问题,我现在去修改代码,非常感谢

lvao813 commented 5 years ago

感谢您的帮助,我现在改为,在项目的index.d.ts文件中添加插件的引用: `import 'egg'; import Passport from 'egg-passport' declare module 'egg' { // 扩展你的配置 interface Application { passport:Passport

}

}` 非常感谢您的指点!