2015-11-23 6 views
0

Я использую узел версии 5.0.0, Uid безопасной версии 2.0.0 и Коа версия 1.1.2Использование Коа не может установить UID-безопасный маркер в куки

Моя проблема заключается Я пытаясь создать токен с uid-safe и сохранить его как файл cookie, а затем извлечь файл cookie и отобразить его в консоли.

Программа генерирует маркер нормально, но когда я пытаюсь установить куки с помощью

this.cookies.set(cookieName, token); 

это только кажется, висит не появится сообщение об ошибке. и строка, после которой должна отображаться «Прошедшая настройка cookie никогда не отображается».

var koa = require('koa'); 
var app = module.exports = koa(); 
var uid = require('uid-safe'); 

app.use(function *() { 
    var cookieName = 'koa.sid'; 
    uid(18).then(function(token) { 
     console.log("token: " + token); // token: 0bk6D3CFtGJgQ5HmiANFnosC 
     this.cookies.set(cookieName, token); 
     console.log("Got past setting the cookie"); // this never gets shown 
     retrievedToken = this.cookies.get(cookieName); 
     console.log(cookieName + ': ' + retrievedToken); 
    }); 
}); 

if (!module.parent) app.listen(3000); 

ответ

2

this.cookies.set() бросает исключение, но так как вы не имеете пункт .catch() в вашей цепочке обещание, что исключение теряется (uid(18).then(...).catch(...)).

Исключение:

TypeError: Cannot read property 'set' of undefined 

Это потому, что this не является правильным контекстом (для всех намерений и целей, вы должны считать неопределенным, если не связать функцию обратного вызова передается .then()) ,

Поскольку вы используете функцию генератора, вы можете использовать вместо yield:

app.use(function *(next) { 
    var cookieName = 'koa.sid'; 
    var token  = yield uid(18); 

    console.log("token: " + token); 
    this.cookies.set(cookieName, token); 
    console.log("Got past setting the cookie"); 
    ... 
    yield next; 
}); 

Кроме того, this.cookies.get() не будет работать, потому что (AFAIK) будет получить только значения куки прошли через просьбу (в то время как вы устанавливаете cookie как часть ответа).

+0

Спасибо, robertklep, который решил мою проблему – Laurence