我发现即使没有用户登录,某些网站也会进行身份验证。例如,以plunker为例,即使是未登录的用户也可以freeze
一个代码段,以便其他用户无法修改;而用户自己可以随时修改片段,即使他在另一个浏览器标签中打开链接。
我目前的解决方案是在用户模型中添加type
字段(即anonym
和normal
)。然后,每次没有普通用户登录时,我系统地生成一个唯一的随机ID,注册并以anonym
用户身份登录。它有效,但缺点是我的数据库中有很多anonym
个用户。
有没有人有更好的解决方案?是否有任何“标准”方式来实现这种隐藏认证?
答案 0 :(得分:2)
我认为您正在寻找的方法称为会话ID。当您另存为匿名用户时,Web应用会创建一个会话ID会话,该会话ID用于通过链接标识用户。例如,在plnkr上,它就像https://plnkr.co/edit/session_id?p=catalogue
,其中session_id
是某种哈希。
要冻结代码段,会话ID会被写入带有该标志的cookie中,例如说该状态已冻结。如果您在Chrome中将其冻结,并在Chrome的私人窗口或同一台计算机上的Firefox中打开,您将无法解冻它。它的行为方式与没有cookie的其他用户的行为方式相同。事实上,使用cookie的会话哈希,而不是任何用户标识是better for security reasons。
现在,这种方法在某种意义上并不比创建匿名用户更好 - 您仍然必须将会话记录保存到数据库中才能通过链接打开会话上下文。实际上,如果假定用户在代码中存在大量用例和位置,那么在您的情况下可能会更简单地执行您所做的操作。
然而,在许多情况下,会话与用户的分离很有意义,因为它简化了登录或注册后保持会话状态。假设一些网店在您注册后会清空您的篮子,会造成相当大的挫败感,特别是如果您将几个小物品放入其中,您现在必须再次找到它并放回去。那些没有会议或在注册或登录时没有正确使用它们的人。
否则,正如我所写的那样,你必须处理许多污染数据库的匿名会话,除非你有某种明智的保留策略,这取决于你的用例。比方说,例如,一个类似于plnkr.co
的网站用于共享代码片段,并将它们发布到诸如stackoverflow之类的网站上应该更好地保留这些会话,而有用户访问这些会话至少每年说一次。因此,会话应该具有访问日期和政策,即它超过1年。
希望它有所帮助。
答案 1 :(得分:0)
我使用本地存储做了类似的事情。它允许您在浏览器上存储数据。然后,用户可以打开选项卡,完全关闭浏览器并重新打开等,数据仍然存在。然后它似乎会为他们保存,但实际上它只是存储在他们的浏览器上。
这不允许其他人看到他们所做的事情,所以不确定这是否是你所追求的。
我将它们包装在函数中,以防我之后选择更改它们,就像这样
{{1}}
一些信息,包括兼容性 https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API