首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用KoaJS和PassportJS自动登录用户

使用KoaJS和PassportJS自动登录用户
EN

Stack Overflow用户
提问于 2015-05-26 02:33:49
回答 2查看 352关注 0票数 0

我试图用PassportJS自动登录一个用户。

这是我目前的代码:

代码语言:javascript
复制
myRouter.get('/signin', function* (next) {

    user = {...};

    var res = this.res; // needed for the function below
    this.req.login(user, function(err) {
        if (err)
            console.log('error logging in user - '+err);
        return res.redirect('/'); // <--- line 439
    });
});

但是当我运行它时,我得到了一个错误:

代码语言:javascript
复制
  error logging in user - TypeError: undefined is not a function
  TypeError: undefined is not a function
      at /srv/www/domain.com/app.js:439:32
      at /srv/www/domain.com/node_modules/koa-passport/node_modules/passport/lib/http/request.js:49:48
      at pass (/srv/www/domain.com/node_modules/koa-passport/node_modules/passport/lib/authenticator.js:293:14)
      at Authenticator.serializeUser (/srv/www/domain.com/node_modules/koa-passport/node_modules/passport/lib/authenticator.js:295:5)
      at Object.req.login.req.logIn (/srv/www/domain.com/node_modules/koa-passport/node_modules/passport/lib/http/request.js:48:29)
      at Object.<anonymous> (/srv/www/domain.com/app.js:434:26)
      at GeneratorFunctionPrototype.next (native)
      at Object.dispatch (/srv/www/domain.com/node_modules/koa-router/lib/router.js:317:14)
      at GeneratorFunctionPrototype.next (native)
      at Object.<anonymous> (/srv/www/domain.com/node_modules/koa-common/node_modules/koa-mount/index.js:56:23)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-26 02:41:32

我意识到,要在koa中重定向,它不是使用res,而是使用this,您必须执行以下操作:

代码语言:javascript
复制
var res = this; // needed for the next function
this.req.login(user, function(err) {
    if (err)
        console.log('error logging in user - '+err);
    return res.redirect('/');
});
票数 0
EN

Stack Overflow用户

发布于 2015-05-26 02:54:42

您的代码很好,只是res被称为response,所以只需在var res = this.response;中更改var res = this.res;就可以了。res确实存在,但它是节点http模块响应,而不是Koa Response对象,因此没有任何redirect方法。redirect被别名为this,这就是为什么您可以使用this.redirect,但它实际上是一个Response方法。有关更多细节,请查看http://koajs.com/#context

为了避免分配thisresponse,您只需将this绑定到您的函数,我认为它在大多数情况下都比较干净:

代码语言:javascript
复制
myRouter.get('/signin', function* (next) {

    user = {...};

    this.req.login(user, function(err) {
        if (err)
            console.log('error logging in user - '+err);
        return this.redirect('/'); // <--- line 439
    }.bind(this));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30448535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档