简体   繁体   English

如何让 Passport.js 在 Adonis 框架中工作

[英]How to make Passport.js work in Adonis Framework

I wanted to know if Passport.js can ONLY be used in an Express framework and not in any other?我想知道Passport.js是否只能在Express framework而不能在任何其他Express framework使用? The docs doesn't completely answer my question.文档并没有完全回答我的问题。 I'm in the middle of migrating my project from Express to Adonis.js and I can't seem to make passport work.我正在将我的项目从 Express 迁移到Adonis.js ,但我似乎无法让 Passport 正常工作。 Here is a sample of my code:这是我的代码示例:

 const passport = use('passport') const bearer = use('./bearer') passport.use('bearer', bearer) module.exports = passport

and here is how I register it:这是我注册它的方式:

 const namedMiddleware = { auth: 'Adonis/Middleware/Auth', guest: 'Adonis/Middleware/AllowGuestOnly', bearer: passport.authenticate(['bearer'], { session: false }), }

this is the usage (I provided a bearer token):这是用法(我提供了一个不记名令牌):

 Route.post('/', ({ response }) => { response.json('Hello world') }).middleware(['bearer'])

It does not work.这是行不通的。 Error about res.setHeader is not a function showing.关于 res.setHeader 的错误不是显示的函数。 Maybe because the resoponse and http structure is different in adonis?也许是因为adonis中的响应和http结构不同?

I know that Adonis has its own authentication library but my INITIAL goal is to get what I have now in Express to work in an Adonis environment before making any library changes to avoid any complications.我知道 Adonis 有自己的身份验证库,但我的初始目标是在进行任何库更改以避免任何复杂化之前,让我现在在 Express 中拥有的内容在 Adonis 环境中工作。

I recently migrated from knex to adonis.js as well.我最近也从 knex 迁移到了 adonis.js。 Integrating passport.js was initially painful but I get it to work with Macros.集成passport.js 最初很痛苦,但我让它与宏一起工作。

For your error, Adonis' Request object has no setHeader.对于您的错误,Adonis 的 Request 对象没有 setHeader。 You will need to create a macro on Request for that function.您将需要在请求时为该功能创建一个宏。 Something like this像这样的东西

function setHeader (name, value) {
  this.header(name, value)
}
Response.macro('setHeader', setHeader)

Add that to a provider or hooks and you should be all set.将其添加到提供者或钩子中,您应该一切就绪。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM