Rails设计多个并发会话

时间:2016-07-14 17:58:58

标签: ruby-on-rails ionic-framework devise mongoid

我正在使用rails开发一个Web应用程序并设计用于身份验证。有两种类型的用户,一种可以有多个并发会话(超级),另一种只能同时进行会话(正常)。为了实现此行为,我在User模型上添加了一个新字段来存储authentication_token(在SessionsController #create中生成)。此外,我向ApplicationController添加了一个新的过滤器,它检查会话中存储的令牌是否等于普通用户时保存在用户模型上的令牌。当它不是相同的身份验证令牌时,我们会注销普通用户。

现在我正在开发一种新的离子移动应用程序,它需要登录到相同的rails应用程序。但是,在这种情况下,所有用户类型都可以有多个并发会话。为了做到这一点,我们希望继续使用设计(虽然我们也考虑过使用带密码流的门卫)。

我不确定获得此方法的最佳方法。主要问题是检测我们是否使用rails或离子应用程序访问API。一种方法是添加参数,但我不喜欢在所有请求中使用参数。另一种方法是使用浏览器gem,但我们可以从移动设备的浏览器访问网站。

当我们使用rails应用程序时,我们可以使用上述相同的行为。否则,我认为没有必要做任何事情,因为默认情况下,devise允许并发会话。

另一个可能性是使用新模型来存储身份验证令牌及其类型(rails或ionic)。如果我们使用rails应用程序,那么我们查询rails身份验证令牌并覆盖它(如果它不存在则创建)。相反,我们将新的authentication_token添加为与用户模型相关的新实例。通过这种行为,我们可以手动控制令牌的到期并存储更多信息(IP,浏览器......)。

我不确定实现此行为的最佳方法。提前谢谢。

0 个答案:

没有答案