Não consigo definir nada para
req.session
Estou tentando armazenar o token oauth e o segredo em uma sessão para que eu possa verificá-los após o retorno de chamada autorizado. Aqui está o meu código
var express = require("express"),
app = express(),
server = require("http").createServer(app),
io = require("socket.io").listen(server),
oauth = require("oauth"),
tumblr = require("tumblr.js"),
client = {
consumer_key: "1n9fMPxCBFBbcIGRImYKSK5wwDL6yux64S4DxEwiwzHTNuaIoD",
consumer_secret: "bW9YKbnwgxexyVx1AaxQr1QoemEkjd29p5U1WpbZ8r1XEH41C0"
},
consumer = new oauth.OAuth(
"http://www.tumblr.com/oauth/request_token", "http://www.tumblr.com/oauth/access_token",
client.consumer_key, client.consumer_secret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");
server.listen(1337);
app.configure("dev", function(){
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "topsecret" }));
});
app.get("/home", function(req, res){
consumer.getOAuthRequestToken(function(err, oauth_token, oauth_token_secret, results){
if(err){
console.log(err);
}else{
//req.session.oauth.token = oauth_token;
console.log("oauth.token: " + oauth_token);
//req.session.oauth.token_secret = oauth_token_secret;
console.log("oauth.token_secret: " + oauth_token_secret);
res.redirect("http://www.tumblr.com/oauth/authorize?oauth_token="+oauth_token);
}
});
});
app.get("/oauth/testapp", function(req, res){
res.send("callback");
});
Quando eu descomente
req.session.oauth.token = oauth_token;
Eu recebo um erro "não é possível ler a propriedade" oauth "de indefinido" e também req.session é exibido indefinido no console.
Respostas:
2 para resposta № 1Você está tentando definir a propriedade token
em um objeto oauth
na sessão. Se o oauth
objeto não for inicializado, será undefined
e você não pode definir o token
atributo. Você primeiro precisa inicializar o oauth
objeto na sessão. Você poderia, por exemplo, fazer
req.session.oauth = {token: theToken}
Isso criará um objeto na sessão e também definirá o token
propriedade desse objeto.
O @robertklep descobriu a outra metade da solução: verifique se você está executando o ambiente correto. Desde que você tenha usado dev
dentro app.configure
, você deve executar o nó com NODE_ENV=dev
para a configuração a ser aplicada.
2 para resposta № 2
var app = express();
app.configure("dev", function() {
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: "topsecret" }));
app.use(app.router); // You need to add the router after the express.session
});
espero que isso possa ajudá-lo