AngularJS + Socket.IO +身份验证

时间:2014-04-24 21:17:48

标签: angularjs authentication socket.io

我很好奇其他人如何解决以下问题...

我有一个需要用户身份验证的角度应用程序。用户必须登录系统才能发出请求。还必须授权用户创建socket.io连接。

首次启动应用程序时,我必须确定用户是否已获得授权。我打算在sessionStorage中查找用户对象/令牌。那有意义吗?如果用户未获得授权,则应用程序将发出请求以获取当前用户。如果/何时失败,则返回401错误并且角度拦截/提示输入用户名/密码。

鉴于有两种不同的身份验证代码路径(检查sesssionStorage vs发出请求并等待响应),如何触发对应用程序所需的所有其他信息的请求?您是否发出/收听在两种情况下都会广播的LOGIN事件?

我的计划是在LOGIN事件中包装socket.io连接尝试和“.on(...)”调用,这有意义吗?

如果您想要在LOGIN事件触发后加载的控制器中侦听socket.io事件或从服务器获取信息,那么如何触发从服务器检索数据?

对于长篇大论的问题感到抱歉,但我遇到了障碍,我想知道其他人如何管理从服务器获取所有身份验证和不同信息。

1 个答案:

答案 0 :(得分:0)

好的,我想按顺序提问。

使用sessionStorage来保存用户身份验证信息是否有意义?

是。您需要根据您希望的工作方式来决定本地/会话存储。我们决定我们希望会话在后端识别的时间段内保持活动状态,因此即使用户关闭浏览器并重新打开它,它们也会登录,因此我们选择了localStorage而不是sessionStorage。

如何触发对应用程序所需的所有其他信息的请求?您是否发出/收听在两种情况下都会广播的LOGIN事件?

登录后,我们将用户重定向到“登陆”页面(路线)。我们所有的路由/状态更改都在执行会话身份验证的解析功能上等待。我们只将会话ID存储在localStorage中。成功更改状态后,与新加载的视图一起使用的控制器开始从我们的服务请求数据。我们所有的控制器都设计用于在init上加载数据。所以不,我们不使用事件。感觉事件应该只作为最后的手段使用 - 这也是我从核心Angular开发者那里获得的印象,因为我在拉取请求中被判惩事件使用:)

我的计划是在LOGIN事件中包装socket.io连接尝试和“.on(...)”调用,这有意义吗?

也许。我没有直接使用socket.io,而是一直在试验氛围(主要是因为我们有一个java后端要求)。我确实在登录成功处理程序中启动了连接。但是我已将一般气氛事件处理放入< body>上的应用程序级控制器。

如果您想要在LOGIN事件触发后加载的控制器中侦听socket.io事件或从服务器获取信息,那么如何触发从服务器检索数据? / em>的

我可以想象(再次使用应用级控制器或服务,或者在我的情况下,可能两者都是)一个返回socket.io连接的函数。已经形成的控制器可以获取init上的socket.io内容,并为其感兴趣的事件设置侦听器。

我的建议是首先解决所有会话和身份验证问题,特别是关于如何进行路由。一旦所有这些都令你满意,然后添加socket.io的东西。我意识到这可能在所有情况下都不可能,因为你可能需要socket.io连接中的东西,这对你的应用程序至关重要早期阶段。