2013-01-20 44 views
0

我應該如何重定向或寫東西了未經授權的用戶在我的應用程序重定向如果express.js沒有cookie,並socket.io

我想重定向頁面,如果沒有Cookie中定義或Cookie值是空

這裏是我的腳本,我指定了我的想法,我應該添加一些東西。

var express = require('express'), 
     app = express(), 
     memcache = require("memcache"), 
     http = require('http'), 
     server = http.createServer(app), 
     io = require('socket.io').listen(server), 
     co = require("./cookie.js"), 
     codein = require("node-codein"); 

    //check if user loggedin 
    // routing 
    app.get('/', function (req, res) { 
     res.sendfile(__dirname + '/index.html'); 
    }); 





    io.configure(function(){ 
       io.set('authorization', function (data, accept) { 
        var cookieManager = new co.cookie(data.headers.cookie); 

        var client = new memcache.Client(11211, "localhost"); 
        client.connect(); 

        client.get("sessions/"+cookieManager.get("sec_session_id"), function(error, result){ 
         if(result){ 
          var session = JSON.parse(result); 
          user = JSON.parse(session.name); 
          user = user.username; 
         } 

        if (typeof result === 'undefined' || (!result)) { 
//------------> here if no cookie redirect to noaccess.html or just write you have no access to this page 
        return accept('No cookie transmitted.', false); 

        } else { 
//------------> here if there is cookie then let users to see index.html 
        data.sessionID = cookieManager.get("sec_session_id"); 
        accept('cookie recieved', true); 
        } 


       io.on('connection', function(socket) { 
       //console.log(socket.handshake.sessionID); 
       }); 

      }); 
       }); 
     }); 




    server.listen(3000); 

我tryed一切,但沒有運氣提前這個

感謝...

+0

恕我直言,你不應該允許socket.io連接沒有餅乾,也可以使用一些授權插件來表達,如[護照](http:// passportjs。 org /) – drinchev

+0

@drinchev我沒有允許沒有任何cookie,如果你看到我解析Cookie模塊親愛的drinchey ..我只是想知道如何重定向或打印頁面中的東西,如果沒有cookie存儲我用戶PC – HiDd3N

回答

0

考慮到要重定向用戶,它會更有意義檢查中的餅乾app.get回調,因爲您現在可以訪問響應對象。

如果你想攔截每個請求,簡單的說像這樣的塊在你的代碼:

app.get("/*", function(req, res, next){ 

    if(req.cookies){ // or req.cookies['cookiename'] if you want a specific one 
     res.render("index.html"); 
    } 

    else{ 
     res.render("noaccess.html"); 
    } 
    //You can optionally put next() here, depending on your code 
}); 
0
在我的情況

我想我需要發出,如果同意了訪問,我們在服務器端有這個

io.on('connection', function(socket) { 
      //console.log(socket.handshake.sessionID); 
      socket.emit('access', 'access granted'); 
      }); 
    }); 

並在客戶端,我們有這個形式

<html> 
    <head> 
    <title> Tying it all together demo</title> 
    <script src='/socket.io/socket.io.js'></script> 
    <script src='http://code.jquery.com/jquery-latest.js'></script> 
    </head> 
    <body> 
    <p id="text">access denied</p> 
    <script> 
     var socket = io.connect('http://localhost:3000/'); 
     socket.on('access', function (data) { 
      $("#text").html(data); 
     }); 

    </script> 
</body> 

那麼,如果我們有機會獲得我們發出的訪問功能在服務器和訪問被拒絕的文本將更改爲準許訪問