利用socket.io来rails中实现简单的sso

看到Rails圣经中CAS方案实现sso,太过折腾,对于验证在线,其实用socket.io可以实现。

这里用一个很简单地例子来描述怎么实现类似sso的功能。

首先需要一个rails项目,其中devise提供用户系统。

加入socket.io asset的gem/或者用rails-bower安装一个socket.io:

gem 'socket.io-rails'

sso的服务端用socket.io来对线上所有客户端发送一条数据 即:

io.on('connection', function (socket) {
    socket.on('uid', function (data) {
    io.emit('uid' , data);
});

在我们的rails中:

      var socket = io('http://xxxx:8888');
      socket.emit('uid', { id: <%=current_user.id%> , session_id: "<%=request.session_options[:id]%>" });

      socket.on('uid' , function(data){          if(data.id == <%=current_user.id%> && data.session_id != "<%=request.session_options[:id]%>")
          {              window.location.href = "<%=warning_path%>";
          }
      });

验证当前的uid是否存在于别的客户端,如果sessionid不同,应该会是其他设备登陆,然后跳转到提醒。

这只是一个思路,验证做的很简单。

你可能感兴趣的:(利用socket.io来rails中实现简单的sso)