我希望能够基于Laravel创建的客户端会话数据来验证socket.io客户端。
我的想法是:
A - 从客户端向服务器发出用户名和电子邮件;
B - 用户登录后在php中将所需的数据存储在Redis中,然后根据会话cookie id在Node.js中读取它。如果我选择这种方法,我可能需要在Redis中存储sessionId ->“email,name”
;
C - 在Laravel中使用Redis会话驱动程序,解码由Laravel设置的cookie,从Node.js访问Laravel会话值,反序列化和解码它们;
方法A显然非常不安全,只能用于证明概念。
方法C似乎更好,因为我不必复制或管理会话数据,而只需对其进行解码。然而,这种方式将我的应用程序与Laravel管理会话的实现细节耦合起来,因此似乎不适合。
方法B看起来更有前途,而且更容易实现。但是,使用方法B意味着我必须自己管理一些会话数据,以便socket.io能够读取它。这样做可能会使Laravel会话数据和我在Redis中存储的会话数据相互不一致,并且这将在某个时间点发生。例如,在某些极端情况下,过期的会话ID可能会被重新使用,并且某些socket.io客户端将被错误地验证为另一个用户。我目前无法想到更微不足道的情况,但由于这种不一致性,我认为存在这种情况并且安全性和UX都可能会受到影响。
有没有更优雅,更强大,更安全的方法来实现基于Laravel会话数据的用户身份验证?如果没有更好的方法,我假设方法B是最好的,那么我能做什么来提高Redis中管理的会话数据与Laravel会话数据之间的一致性。
总的来说,关键是在Laravel和php之外访问Laravel会话数据,并通过sessionId、email和username识别客户端。