2013-10-15 62 views
0

我是新来播放的框架,所以我是新来确保社会。我必须在一个项目中实现Google身份验证,但我不知道我应该如何连接到Gmail。我所拥有的是一个扩展的身份像这样的账户类:确保社会连接提供商

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?

回答

1
  1. 为用户提供一个选择界面。
  2. 注册与Google API Console您的应用程序。创建2个ID用于测试,另一个用于产品。
  3. 一个重定向到谷歌服务器上创建一个按钮。

的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. 被重新定向到上面的链接后,用户可以向应用的访问权限谷歌帐户。
  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用户通过它可以搜索,不要用邮件用于此目的)

  • 如果用户没有按不存在,添加它们,请求更多详细信息等。

  • 在这两种情况下,都通过为用户创建会话来验证用户身份。
1

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

1)添加一个链接到谷歌,使用户点击那里,并启动身份验证流程 2)实施UserService,以便SecureSocial可以将用户保存在您的数据库中。 3)注册在play.plugins文件中的谷歌插件。 4)使用SecuredAction,而不是建立在操作播放的保护你的行动。

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

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