首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Passport验证Supertest请求?

如何使用Passport验证Supertest请求?
EN

Stack Overflow用户
提问于 2012-12-22 16:14:51
回答 8查看 37.2K关注 0票数 73

我使用Passport.js进行身份验证(本地策略),并使用Mocha和Supertest进行测试。

如何使用Supertest创建会话并发出经过验证的请求?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-12-22 18:04:14

为此,您应该使用superagent。它是较低层的模块,由supertest使用。请看一下Persisting an agent部分

代码语言:javascript
复制
var request = require('superagent');
var user1 = request.agent();
user1
  .post('http://localhost:4000/signin')
  .send({ user: 'hunter@hunterloftis.com', password: 'password' })
  .end(function(err, res) {
    // user1 will manage its own cookies
    // res.redirects contains an Array of redirects
  });

现在,您可以使用user1发出经过身份验证的请求。

票数 55
EN

Stack Overflow用户

发布于 2013-08-27 21:11:05

正如zeMirco指出的,底层superagent模块支持会话,自动为您维护cookie。但是,可以通过未记录的功能使用supertest中的superagent.agent()功能。

只需使用require('supertest').agent('url')而不是require('supertest')('url')

代码语言:javascript
复制
var request = require('supertest');
var server = request.agent('http://localhost:3000');

describe('GET /api/getDir', function(){
    it('login', loginUser());
    it('uri that requires user to be logged in', function(done){
    server
        .get('/api/getDir')                       
        .expect(200)
        .end(function(err, res){
            if (err) return done(err);
            console.log(res.body);
            done()
        });
    });
});


function loginUser() {
    return function(done) {
        server
            .post('/login')
            .send({ username: 'admin', password: 'admin' })
            .expect(302)
            .expect('Location', '/')
            .end(onResponse);

        function onResponse(err, res) {
           if (err) return done(err);
           return done();
        }
    };
};
票数 63
EN

Stack Overflow用户

发布于 2013-06-14 23:39:22

尝尝这个,

代码语言:javascript
复制
  var request=require('supertest');
  var cookie;
  request(app)
  .post('/login')
  .send({ email: "user@gluck.com", password:'password' })
  .end(function(err,res){
    res.should.have.status(200);
    cookie = res.headers['set-cookie'];
    done();        
  });

  //
  // and use the cookie on the next request
  request(app)
  .get('/v1/your/path')
  .set('cookie', cookie)
  .end(function(err,res){  
    res.should.have.status(200);
    done();        
  });
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14001183

复制
相关文章

相似问题

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