2012-02-28 9 views
1

Google Chrome拡張機能のポップアップで、node.js + express.jsサーバーからページを読み込みます。ページには、私はこのようにreq.session.userの状態に応じて変更をロードします。Express.js + Google Chrome拡張機能:セッションの保存は可能ですか?

app.get('/', function(req, res){ 
    if(req.session.user){ 
     res.render(__dirname + '/pages/base.jade', {}); 
    } 
    else{ 
     res.render(__dirname + '/pages/login_register.jade', {}); 
    } 
}); 

req.session.userがnullの場合、私は、ユーザーがログインを行うか、登録可能なページを送信します。彼/彼女は、ログインをした場合、これは、サーバーで何が起こるかです:

app.post('/login', function(req, res){ 
    var user = {}; 
    user.username = req.body.username; 
    user.password = req.body.password; 
    checkLogin(user, function(foundUser){ 
     //login correct 
     console.log("login!"); 
     req.session.user = foundUser; 
     res.render(__dirname + '/pages/base.jade', { 
     }); 
    }); 
}); 

だから、正しくreq.session.userユーザがログインすると、現在のユーザーの資格情報を使用して設定する必要があります。問題は、いったんログインしてからChrome拡張機能のポップアップを閉じると、再び開くときにログインページが表示されることです。

私の質問です:popupはexpress.jsサーバーのセッションストレージをサポートしていますか?はいの場合、私のコードに何か問題があります。誰かが間違っていることを指摘できますか?ありがとう。

編集:私はまだそれがどのように動作するかの深い理解を持っていないので、私は、ここに冗長な何かをやっているかもしれません

var app = express.createServer(
    express.logger(), 
    express.cookieParser(), 
    express.session({ secret: 'keyboard cat' }) 
); 

app.use(express.cookieParser()); 
app.use(express.session({ secret: "keyboard cat" })); 
app.set('view engine', 'ejs'); 
app.set("view options", { layout: true }); 

これはどのように私のセットアップサーバーです。

+0

Express(実際には接続)セッションはCookieベースです。あなたのアプリはどのように設定されていますか? '(express.cookieParser())'と 'use(express.session())'を使いますか?クッキーが機能していることを確認してください。おそらく、クッキーは拡張機能では別の方法で扱われます。 –

+0

サーバーの設定で投稿を編集しました。ご覧のとおり、 'express.session()'と 'express.cookieParser()'を使います。 – Masiar

+2

これは間違いなく冗長です。私はいつも 'express.createServer()'をパラメータなしで実行し、すべてのミドルウェアを '.use'します。それを試して、それが修正されているかどうか確認してください! –

答えて

2

を問題は、あなたのサーバーを設定しているどのようにされて - あなたは二回cookieParsersessionミドルウェアを使用している:。

var app = express.createServer(
    express.logger(), 
    express.cookieParser(), 
    express.session({ secret: 'keyboard cat' }) 
); 

app.use(express.cookieParser()); 
app.use(express.session({ secret: "keyboard cat" })); 

あなたはだけなので、createServerまたはuseにパラメータとしていずれかミドルウェアを使用する必要があります。

var app = express.createServer(); 

app.use(express.logger()); 
app.use(express.cookieParser()); 
app.use(express.session({ secret: "keyboard cat" })); 
0

ポップアップページは、毎回開くときに再読み込みされます。セッションを保存/管理できる拡張機能用のバックグラウンドページを作成する必要があります。その後、ポップアップからバックグラウンドページにメッセージdocsを渡して通信することができます。使用あなたがbackgroundpageにログインデータを送信しても、ユーザーがすでにログインしているかどうかを尋ねることができるメッセージング

+0

私は以前の拡張で、私の質問では、サーバーがポップアップページによって送信されたセッションを格納する場合はどういう意味だった。理想的には、いくつかのページをナビゲートしてログインしている場合、ページをリロードしてもログインする必要があります。 – Masiar

+0

また、私はちょうどブラウザではなく拡張を介してそれらのページに移動してみました(笑前にこのことについて考えていなかった)、それは、サーバーでセッションを保存していないようです。問題はそこにあります、拡張子は私が推測する問題ではありません。 – Masiar

+0

認証されたユーザーをどのように識別していますか?Cookieを使用している場合は、ポップアップを再度開いた後でもCookieが存在するかどうかを確認してください。ソケットを使用している場合は、ユーザーがポップアップを閉じるときにソケットが閉じられていると思います。 –

関連する問題