使用 koa 无法在 cookie 中设置 uid-safe 令牌
Using koa can't set uid-safe token in a cookie
我使用的是节点版本 5.0.0、uid-safe 版本 2.0.0 和 koa 版本 1.1.2
我的问题是我正在尝试使用 uid-safe 生成令牌并将其保存为 cookie,然后检索 cookie 并将其显示在控制台中。
程序生成令牌正常,但是当我尝试使用
设置 cookie 时
this.cookies.set(cookieName, token);
它似乎只是挂起,没有显示任何错误消息。
之后的行应显示 "Got past setting the cookie never gets shown".
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);
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()
将不起作用,因为(据我所知)它只会获取通过请求传入的 cookie 值(而您将 cookie 设置为响应的一部分)。
我使用的是节点版本 5.0.0、uid-safe 版本 2.0.0 和 koa 版本 1.1.2
我的问题是我正在尝试使用 uid-safe 生成令牌并将其保存为 cookie,然后检索 cookie 并将其显示在控制台中。
程序生成令牌正常,但是当我尝试使用
设置 cookie 时this.cookies.set(cookieName, token);
它似乎只是挂起,没有显示任何错误消息。 之后的行应显示 "Got past setting the cookie never gets shown".
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);
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()
将不起作用,因为(据我所知)它只会获取通过请求传入的 cookie 值(而您将 cookie 设置为响应的一部分)。