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

时间:2013-05-04 03:35:42

标签: scala playframework playframework-2.0 securesocial

使用Play! 2.0.4和SecureSocial 2(http://securesocial.ws/)。 Scala实现。这个问题的大部分内容将直接引用此处的示例:https://github.com/jaliss/securesocial/blob/2.0.12/samples/scala/demo/app/service/InMemoryUserService.scala

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

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

至少,我试图弄清楚我应该为后端服务中的findsave方法公开哪些API /参数。如果需要澄清这个问题,请告诉我们。)

2 个答案:

答案 0 :(得分:6)

经过几天的设计考虑并更好地了解SecureSocial后,我意识到实施findsave方法并不难理解。它正确地设计了重要的后端服务中的逻辑。

基本上,我创建了一个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

我的object PlatformUser包含访问后端HTTP API以来回传输数据的代码。以下是我实施findsave方法的方法:

  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。如果发现传入Identity的电子邮件已经存在于平台上,则对现有平台ID执行身份的自动链接(除非它发现该电子邮件正在多个帐户上使用社交网络,将触发错误)。通过电子邮件通知用户他们的自动链接的主要地址。

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

就是这样。我希望这有助于未来的开发人员试图找出更复杂的SecureSocial用途。

答案 1 :(得分:0)

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

恶意用户可以将他的Twitter电子邮件设置为您的邮件ID。当他使用Twitter登录时,它会自动链接"到你的帐户!

请参阅此主题以获取进一步分析https://github.com/jaliss/securesocial/issues/14