Playframework 查询当前登录用户的SecureSocial

Playframework 查询当前登录用户的SecureSocial,playframework,securesocial,Playframework,Securesocial,有没有办法知道哪些用户当前使用安全社交API使用Playframework应用程序登录?如果是,怎么做 更一般地说,在Play/SecureSocial应用程序中,当前登录用户存储在哪里以及如何存储?您是否使用Play Framework 2 如果是这样,您可以创建自己的UserService,如文档中所述: 然后可以实现find(Identity)(在Scala中)或doFind(Identity)(在Java中)方法,并选择如何记录和存储用户 事实上,在这些方法中,您必须根据用户的连接方式(

有没有办法知道哪些用户当前使用安全社交API使用Playframework应用程序登录?如果是,怎么做


更一般地说,在Play/SecureSocial应用程序中,当前登录用户存储在哪里以及如何存储?

您是否使用Play Framework 2

如果是这样,您可以创建自己的
UserService
,如文档中所述:

然后可以实现
find(Identity)
(在Scala中)或
doFind(Identity)
(在Java中)方法,并选择如何记录和存储用户

事实上,在这些方法中,您必须根据用户的连接方式(Twitter、Facebook…)记录用户

然后,您还必须实现
save(Identity)
(在Scala中)或
doSave(Identity)
方法,以便在用户首次使用特定社交网络创建帐户或日志时存储该用户

如果提供使用用户名//密码登录的方法,则必须实现
findByEmailAndProvider
(在Scala中)或
doFindByEmailAndProvider
方法


因此,如果您控制用户连接到站点的方式,您可以存储(和检索)连接的用户。

您使用的是Play Framework 2吗

如果是这样,您可以创建自己的
UserService
,如文档中所述:

然后可以实现
find(Identity)
(在Scala中)或
doFind(Identity)
(在Java中)方法,并选择如何记录和存储用户

事实上,在这些方法中,您必须根据用户的连接方式(Twitter、Facebook…)记录用户

然后,您还必须实现
save(Identity)
(在Scala中)或
doSave(Identity)
方法,以便在用户首次使用特定社交网络创建帐户或日志时存储该用户

如果提供使用用户名//密码登录的方法,则必须实现
findByEmailAndProvider
(在Scala中)或
doFindByEmailAndProvider
方法


因此,如果您控制用户连接到站点的方式,您可以存储(和检索)连接的用户。

SecureSocial使用AuthenticatorStore插件跟踪经过身份验证的用户。默认实现使用播放缓存,但您可以创建自己的缓存。如果您创建了自己的实现,那么您可以决定在何处保存会话,然后查询该会话以了解您需要什么


另一种方法是编写EventListener。SecureSocial引发登录和注销事件。您可以持久化这些事件,这也将为您提供活动用户。但是,在这种情况下,如果用户刚刚关闭浏览器,则可以释放注销事件。我想说,依赖AuthenticatorStore更可靠,因为验证器有一个有效期,您可以在运行查询时进行检查。

SecureSocial使用AuthenticatorStore插件跟踪经过身份验证的用户。默认实现使用播放缓存,但您可以创建自己的缓存。如果您创建了自己的实现,那么您可以决定在何处保存会话,然后查询该会话以了解您需要什么


另一种方法是编写EventListener。SecureSocial引发登录和注销事件。您可以持久化这些事件,这也将为您提供活动用户。但是,在这种情况下,如果用户刚刚关闭浏览器,则可以释放注销事件。我想说,依赖AuthenticatorStore更可靠,因为验证器有一个过期期限,您可以在运行查询时进行检查。

谢谢Zarkus。是的,我确实使用第二局。您建议我在何处存储/保存当前连接的用户?雷迪斯?MongoDB?HttpSession?这完全取决于您的体系结构。我想如果你已经在使用数据库(SQL或NoSQL,MySQL或MongoDB,甚至Redis),你应该继续使用它。但是,如果您不喜欢,可以选择使用MemCache的缓存系统,例如,因为Play具有不变性和无状态特性(因此不要使用会话或应用程序存储)。希望它能帮助你;)我担心的另一个问题是,如果用户没有注销但离开了应用程序,会发生什么:他们是否仍在Redis/Memcache中生活?如果是,会持续多久?是的,用户仍将被存储。删除之前的延迟取决于您如何实现它。例如,您可以设置超时(30分钟),每次用户请求服务器时更新,以及自动删除过期用户的批处理服务。谢谢Zarkus。是的,我确实使用第二局。您建议我在何处存储/保存当前连接的用户?雷迪斯?MongoDB?HttpSession?这完全取决于您的体系结构。我想如果你已经在使用数据库(SQL或NoSQL,MySQL或MongoDB,甚至Redis),你应该继续使用它。但是,如果您不喜欢,可以选择使用MemCache的缓存系统,例如,因为Play具有不变性和无状态特性(因此不要使用会话或应用程序存储)。希望它能帮助你;)我担心的另一个问题是,如果用户没有注销但离开了应用程序,会发生什么:他们是否仍在Redis/Memcache中生活?如果是,会持续多久?是的,用户仍将被存储。删除之前的延迟取决于您如何实现它。例如,您可以设置超时(30分钟),每次用户请求服务器时更新,以及自动删除过期用户的批处理服务。这是否意味着使用默认AuthenticatorStore,如果用户的缓存项过期,则可以注销用户?AFAIK默认和memcached实现都会在旧条目耗尽内存时删除它们。是的,条目应该在绝对超时过后过期。至于由于内存不足或其他一些配置限制而删除条目,您也是对的,如果缓存被大量使用,这可能会发生,并且应该考虑到这一点。这是否意味着