Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js koa路由器和passport将结果链接到回调中 膝关节炎,我最近从Express迁移到膝关节炎,我的主要问题是关于KOA路由器和护照验证。_Node.js_Passport.js_Koa2 - Fatal编程技术网

Node.js koa路由器和passport将结果链接到回调中 膝关节炎,我最近从Express迁移到膝关节炎,我的主要问题是关于KOA路由器和护照验证。

Node.js koa路由器和passport将结果链接到回调中 膝关节炎,我最近从Express迁移到膝关节炎,我的主要问题是关于KOA路由器和护照验证。,node.js,passport.js,koa2,Node.js,Passport.js,Koa2,回到快车,我可以做一些类似的事情 router.route('/someroute') .post(passport.authenticate('local' , {session:false}) , function(req,res,next){req.authresult}); router.post('/someroute',passport.authenticate(..),function(ctx){

回到快车,我可以做一些类似的事情

router.route('/someroute')
      .post(passport.authenticate('local' , {session:false}) , 
                                  function(req,res,next){req.authresult});
router.post('/someroute',passport.authenticate(..),function(ctx){ ctx.user 
});
基本上,一旦使用passport策略进行了身份验证,策略中返回的任何对象都将被导入REQ对象,我可以在主控制器函数中访问它。方便吧

这是膝关节炎的治疗方法,A/A:
router.post('/someroute' , function(ctx,next){
return passport.authenticate('jwt' ,(err,user,info,status) =>{ 
           ....
 })(ctx);
既然已经解释了这种情况,我的问题是:

一,。 有没有可能像express之类的路线

router.route('/someroute')
      .post(passport.authenticate('local' , {session:false}) , 
                                  function(req,res,next){req.authresult});
router.post('/someroute',passport.authenticate(..),function(ctx){ ctx.user 
});
二,。 如果我没有像这样传递ctx对象,为什么会得到未找到的结果

passport.authenticate(...)(ctx);

将对象放入定义的方法中,这种实现称为什么。。我从哪里了解它?

像往常一样,我做了一些研究,准备自己回答这个问题

1.是的,可以像express一样进行路由,而无需声明passport身份验证的自定义回调

router.post('../someroute',passport.authenticate('strategy',options),function(ctx){
//access passport return object through ctx.state.user
}
膝关节炎的缺点是,如果策略返回了一个错误(如错误),错误处理将不会由路由回调来完成,而是会自动响应KOA内部服务器错误。如果希望返回与身份验证相关的错误,则必须通过添加属性的相同ctx.state.user对象执行


2.passport.authenticate()返回一个函数,该函数需要一个req、res/ctx对象,因此不提供该对象,这将导致错误(内部承诺拒绝,未提供ctx)。在上述声明中,router.post会自动处理此问题。但是,在另一个函数中声明此问题需要您通过ctx。

对于问题1,我可以链接中间件并通过ctx.state.user访问一个结果。但是如何处理错误和其他参数,没有ctx.state.error