Scala 将SecureSocial与后端用户服务/存储集成?

Scala 将SecureSocial与后端用户服务/存储集成?,scala,playframework,playframework-2.0,securesocial,Scala,Playframework,Playframework 2.0,Securesocial,使用游戏!2.0.4和SecureSocial 2()。Scala实现。此问题的大部分内容将直接引用此处的示例: 我试图找出作者与存储服务进行后端交互的初衷。关于def find(id:UserId)和def findByEmailAndProvider(email:String,providerId:String):方法,SecureSocial是否希望提供一个Facebook id或一封可用于返回完整SocialUser类的电子邮件 如果是这样,那么我们如何将自己的ID分配给每个用户,以便将

使用游戏!2.0.4和SecureSocial 2()。Scala实现。此问题的大部分内容将直接引用此处的示例:

我试图找出作者与存储服务进行后端交互的初衷。关于
def find(id:UserId)
def findByEmailAndProvider(email:String,providerId:String):
方法,SecureSocial是否希望提供一个Facebook id或一封可用于返回完整
SocialUser
类的电子邮件

如果是这样,那么我们如何将自己的ID分配给每个用户,以便将帐户链接在一起?因为如果我扩展身份以包含一个通用ID,那么这也需要重写/扩展社交提供者吗


至少,我正在尝试找出应该为后端服务中的
find
save
方法公开哪些API/参数。让我知道这个问题是否需要澄清:)

在花了几天时间考虑一些设计问题并更好地理解SecureSocial之后,我意识到实现
find
save
方法并不难理解。重要的是在后端服务中正确地设计逻辑

基本上,我创建了一个
PlatformUser
类,该类扩展了
Identity
类,并包含从后端类提取的用户ID和配置文件数据。下面是它的外观:

case class PlatformUser(
  guid: String,
  suspended: Boolean,
  id: UserId, 
  firstName: String, 
  lastName: String, 
  fullName: String, 
  email: Option[String],
  avatarUrl: Option[String], 
  authMethod: AuthenticationMethod,
  oAuth1Info: Option[OAuth1Info] = None,
  oAuth2Info: Option[OAuth2Info] = None,
  passwordInfo: Option[PasswordInfo] = None,
  communityProfile: Option[String] = None

) extends Identity
My
object PlatformUser
包含访问后端HTTP API以来回传输数据的代码。下面是我如何实现
find
save
方法的:

  def find(id: UserId): Option[PlatformUser] = {
    PlatformUser.fetch(id)
  }

  def findByEmailAndProvider(email: String, providerId: String): Option[PlatformUser] = {
    PlatformUser.fetch(email, providerId)
  }

  def save(user: Identity): PlatformUser = {
    PlatformUser.store(user)
  }
合并帐户的逻辑也保留在后端服务中。现在,如果用户还不存在,后端服务将生成一个平台ID。如果发现平台上已经存在一封传入的
标识的电子邮件,则会自动将标识链接到现有的平台ID(除非发现该电子邮件正在同一社交网络的多个帐户上使用,将触发错误)。用户将通过电子邮件通知其自动链接的主地址

剩下的最后一件事是填充
communityProfile
。如果后端服务找不到,则该字段返回为
None
。然后,我会自动将用户重定向到一个“注册”页面,在那里他们需要完成他们的配置文件

仅此而已。我希望这有助于未来开发人员了解SecureSocial更复杂的用途。

“如果发现平台上已经存在传入身份的电子邮件,则会自动将身份链接到现有的平台ID。”。我假设当你说自动链接时,这将是在登录期间。如果是这样,这将是一个安全漏洞

恶意用户可以将他的twitter电子邮件设置为您的邮件id。当他使用twitter登录时,它会“自动链接”到您的帐户


参见此线程进行进一步的分析,

我确实考虑过这一点,我们使用的方法之一是对传入账户进行完整性检查。具有低跟随者计数的用户在系统上被取消资格,因为它们通常是恶意的。即使如此,用户也只能在登录后才链接帐户。同样的用户Cou.我会对不同的提供者使用不同的电子邮件ID。Trello也会做类似的事情,尽管你是对的。下个月我们将实施一个全新的身份验证系统,所以这里的任何东西都会过时。