Ruby on rails 如何记住用户登录的组织?在组织之间切换
背景:Ruby on rails 如何记住用户登录的组织?在组织之间切换,ruby-on-rails,ruby,session,ruby-on-rails-4,authentication,Ruby On Rails,Ruby,Session,Ruby On Rails 4,Authentication,背景: 用户和组织通过关系建立了多对多关系。因此,一个用户可以是多个组织的一部分 但用户只能为1个组织登录 因此,用户有一个屏幕,可以在他所属的组织之间切换 另外,user有一个默认组织,即用户最初登录的组织。这是使用具有一到关系来实现的 如何知道/记住用户当前登录的组织? 现在我有点纠结于如何实现应用程序应该如何知道/记住用户当前登录的组织。我看到了三种选择,并希望得到最有效的建议: 用户数据库中的一个附加列,用于存储用户当前登录的组织(或关系?)的id。然后,的助手方法logged\u
和用户
通过组织
建立了关系
关系。因此,一个用户可以是多个组织的一部分多对多
- 但用户只能为1个组织登录李>
- 因此,用户有一个屏幕,可以在他所属的组织之间切换
- 另外,
有一个默认组织,即用户最初登录的组织。这是使用user
具有一到
关系来实现的
用户
数据库中的一个附加列,用于存储用户当前登录的组织
(或关系
?)的id。然后,的助手方法logged\u in\u可以根据该列中的值找到组织,并返回用户登录的组织。使用db列的实现还支持验证,这样用户就不能将其登录的组织设置为它甚至不属于的组织
会话[:logged\u in\u for]
。但是,1)我怀疑这是否安全(不确定为什么),2)我认为第一个选项更便于验证,3)我也不认为这与登录“记住我”选项结合使用会起作用关系,该关系定义用户登录的组织。这基本上是添加关系的第一个选项的扩展。因为我已经有很多关系了,所以我不喜欢这个选择。或者,对于第一个选项,没有办法绕过此添加
第一个选项是否确实是了解/记住用户当前登录的组织的有效方法?您可以将信息存储在中,但不使用cookie store,而是使用您可以将信息存储在中,但不使用cookie store,使用它实际上取决于您希望为最终用户创建的体验。在您的情况下:
会话
是安全的,您可以像散列一样使用它,它不会与应用程序中的其他功能冲突(除非您使用相同的密钥)。这种情况适用于您的应用程序,因为用户应该在登录后始终选择一个组织,因此它应该是基于会话的这实际上取决于您希望为最终用户创建的体验。在您的情况下:
会话
是安全的,您可以像散列一样使用它,它不会与应用程序中的其他功能冲突(除非您使用相同的密钥)。这种情况适用于您的应用程序,因为用户应该在登录后始终选择一个组织,因此它应该是基于会话的谢谢,听起来像是
session
是一个不错的选择。在以下用例中,会话
会发生什么:1)用户登录时选中“记住我”;2) 会话[:登录]
哈希设置;3) 用户在登录时关闭浏览器;4) 用户再次打开浏览器和网站,由于“记住我”选项,不需要登录。那么session[:logged_in_for]
会不会是nil
,因为这会在关闭浏览器时被破坏?1)session
不会受到影响,因为“记住我”选项将使用cookie(具体实现方式会有所不同);2) 只要浏览器会话处于活动状态,您就可以访问会话[:登录]
;3) 会话
将被删除,但cookies
将持续存在,如果选择了“记住我”,则允许用户在不登录的情况下返回;4) 您是正确的,会话[:logged\u in\u for]
将为零。现在,这取决于您希望为用户记住组织的程度。您可以使用cookies
作为机器相关的,跨机器存储在数据库中。但是,请记住,cookies
是不安全的。谢谢,听起来像是session
才是正确的选择。在以下用例中,会话
会发生什么:1)用户登录时选中“记住我”;2) 会话[:登录]
哈希设置;3) 用户在登录时关闭浏览器;4) 用户再次打开浏览器和网站,由于“记住我”选项,不需要登录。那么session[:logged_in_for]
会不会是nil
,因为这会在关闭浏览器时被破坏?1)session
不会受到影响,因为“记住我”选项将使用cookie(具体实现方式会有所不同);2) 您将有权访问会话[:登录\u_