如果express.js和socket.io中没有cookie,则重定向

时间:2013-01-20 09:20:26

标签: node.js redirect express socket.io

如何在我的应用程序中为未经授权的用户重定向或编写内容

如果没有定义cookie或cookie值为null,我想重定向页面

这是我的脚本,我指定了我认为的地方,我应该添加一些东西。

    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);

我在这个中尝试了一切但没有运气

提前感谢...

2 个答案:

答案 0 :(得分:0)

考虑到您要重定向用户,在app.get回调中检查cookie会更有意义,因为您现在可以访问响应对象。

如果要拦截每个请求,只需在代码中放置一个这样的块:

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
});

答案 1 :(得分: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>

然后,如果我们有访问权限,我们会在服务器中发出访问权限,访问被拒绝的文本将更改为授予访问权限