gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:41:05 24 4
gpt4 key购买 nike

使用 Play ! 2.0.4 和 SecureSocial 2 ( http://securesocial.ws/ )。斯卡拉实现。这个问题的大部分将直接引用此处的示例: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 是否希望提供 Facebook ID或可用于返回完整 SocialUser 类的电子邮件?

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

至少,我试图弄清楚我应该为后端服务中的 findsave 方法公开哪些 API/参数。让我知道这个问题是否需要澄清:)

最佳答案

在花了几天时间进行一些设计考虑并更好地理解 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

我的对象 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。然后,我会自动将用户重定向到“注册”页面,他们需要在该页面上完成个人资料。

就是这样。我希望这有助于 future 的开发人员尝试弄清楚 SecureSocial 的更复杂用途。

关于scala - 将 SecureSocial 与后端用户服务/存储集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16370314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com