2013-10-15 3 views
0

Я новичок в Play framework, поэтому я новичок в обеспечении социальной поддержки. Я должен внедрить аутентификацию Google в рамках проекта, но я не знаю, как именно я должен подключиться к gmail. То, что у меня есть класс счета, который расширяет Идентичность как это:Secure Social connect provider

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 для теста и один для prod.
  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. И Google перенаправляет пользователя на ваш сайт, но включает в себя токен 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) Добавьте ссылку на Google, чтобы пользователь нажал на нее и начал поток аутентификации 2) Внедрение UserService, чтобы SecureSocial мог сохранять пользователей в вашей БД. 3) Зарегистрируйте плагин Google в файле play.plugins. 4) Защитите свои действия с помощью SecuredAction вместо Play, встроенного в Action.

SecuredAction перехватывает запросы и перенаправляет пользователя на страницу входа в систему, если он не аутентифицирован.

Проверьте примеры приложений, поставляемых вместе с модулем, они предоставляют базовый скелет, который вы можете использовать и расширить для создания своего приложения.