0

我是 Play 框架的新手,因此我是安全社交的新手。我必须在项目中实现 Google 身份验证,但我不知道我应该如何与 gmail 连接。我拥有的是一个像这样扩展 Identity 的帐户类:

case class Account(
                identityId: IdentityId,
                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
                )extends Identity

然后我创建一个帐户集合,对其进行迭代并确定用户想要连接的提供者。

 for(account <- accounts){
      if(account.identityId.providerId == service){
        //Sends account info to securesocial module
          success = true
      }
  }

我应该如何调用安全社交 API 以连接到服务,在这种情况下是 Gmail?

4

2 回答 2

1

您不必自己连接到 Google。SecureSocial 为您处理所有身份验证流程。你需要的是:

1) 添加指向 Google 的链接,以便用户单击此处并启动身份验证流程 2) 实施 UserService,以便 SecureSocial 可以将用户保存在您的数据库中。3) 在 play.plugins 文件中注册 Google 插件。4) 使用 SecuredAction 而不是 Play 的内置操作来保护您的操作。

SecuredAction 拦截请求并将用户重定向到未通过身份验证的登录页面。

检查模块附带的示例应用程序,它们提供了一个基本框架,您可以使用和扩展来构建您的应用程序。

于 2013-10-25T21:11:17.963 回答
1
  1. 为用户提供一个选择界面。
  2. 使用Google API 控制台注册您的应用程序。创建 2 个 id,一个用于测试,一个用于生产。
  3. 创建一个重定向到 Google 服务器的按钮。

URL 看起来像这样:

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com% 2Fauth%2Fuserinfo.email&client_id=your_client_id&redirect_uri=your_redirect_uri

  1. 被重定向到上述链接后,用户授予应用访问 Google 帐户的权限。
  2. 谷歌将用户重定向到您的网站,但它包含一个code令牌。

您需要 3 个主要方法:

   case class GoogleTokenResponse(
      access_token: String,
      token_type: String,
      expires_in: String,
      id_token: String
   );
   def getAccessToken: GoogleTokenResponse
   // this is an HTTP request to https://accounts.google.com:443?code=the_code_param

   def getUserData: HttpResponse 
   // this will get the user data from www.googleapis.com
   // it needs the OAuth2 access_token obtained above.
    val req = url("https://www.googleapis.com") / "oauth2" / "v2" / "userinfo" <<? ("alt" -> "json") <<?
  Map(OAuthParams.access_token -> token.access_token); // this is a databinder dispatch call.

  // this is how a Google profile response looks like.
  case class GoogleUserResponse(
      val id: String,
      val name: String,
      val given_name: String,
      val family_name: String,
      val verified_email: Boolean,
      val email: String,
      val locale: Option[String],
      val link: Option[String],
      val hd: Option[String]
    )

现在您有了响应,将其映射到您自己的自定义用户实现。

最后一个阶段是:

  • 如果用户已经存在(存储用户的 GoogleID 并通过它进行搜索,请勿为此使用 EMAIL)

  • 如果用户不存在,请添加他们,询问其他详细信息等。

  • 在这两种情况下,通过为用户创建会话来对用户进行身份验证。
于 2013-10-15T15:49:12.823 回答