2013-11-08 3 views
0

Его проект Grails,
аутентификации Facebook успешно через OAuth,
Теперь, когда он возвращается в мой контроллер, я хочу, чтобы получить EMAILID от зарегистрированного пользователя,
Искал много , но не нашли надлежащую документацию,
Я использую писец и имеет следующий код в Config.groory
OAuth facebook с Grails доступа токенов

import org.scribe.builder.api.FacebookApi 

oauth { 
providers { 
    facebook { 
     api = FacebookApi 
     key = 'xxxx' 
     secret = 'yyyy' 
     callback = "http://my-domain-name-here:8080/TestOAuth2/dashBoard/facebooklogin" 
     successUri = "http://my-domain-name-here:8080/TestOAuth2/dashBoard/success" 
    } 
} 
} 

Любой помощи очень ценится.
Спасибо.

+0

Вы используете Grails OAuth плагин? Какой у вас запрос?В горах вы получаете от facebook? – user1690588

+0

Я отредактировал вопрос и добавил дополнительную информацию, я не уверен, что получено от facebook, но я уже зарегистрирован в браузере, поэтому я предполагаю, что аутентификация прошла успешно. –

ответ

3

Попробуйте это ..,.

Config:

import org.scribe.builder.api.FacebookApi 
... 
oauth { 
    providers { 
    facebook { 
     api = FacebookApi 

     key = 'XXX' 
     secret = 'YYY' 

     scope = 'email,read_stream,publish_actions,user_birthday,publish_stream' 

     callback = "http://localhost:8080/appName/oauth/facebook/callback" //callback to oauth controller of oauth plugin 

     successUri = "http://localhost:8080/appName/myController/facebookSuccess" 
     failureUri = "http://localhost:8080/appName/myController/facebookFailure" 
    } 
    } 
} 

MyController:

def facebookSuccess() { 
    Token facebookAccessToken = (Token) session[oauthService.findSessionKeyForAccessToken('facebook')] 
    def facebookResource = oauthService.getFacebookResource(facebookAccessToken, "https://graph.facebook.com/me") 
    def facebookResponse = JSON.parse(facebookResource?.getBody()) 

    log.info "Email = ${facebookResponse.email}" 
    ... 
} 

Вы можете получить работу пример из моего мерзавца репо. Grails Oauth Plugin Demo.

+0

Большое спасибо за обмен. попробовал это. но получение NPE в.
\t \t def facebookResource = oauthService.getFacebookResource (facebookAccessToken, "https://graph.facebook.com/me")
и я проверил facebookAccessToken - null. –

+0

Можете ли вы поделиться кодом своего тега oauth connect? – user1690588

+0

уверен. его Войти с помощью Facebook

0

Email является не часть Facebook public_profile. Единственный способ получить адрес электронной почты пользователей - запросить расширенный permissions в поле электронной почты. Вы можете сделать это , добавив область поставщику oauth.

Config.groovy

oauth { 
    providers { 
     facebook { 
      api = org.scribe.builder.api.FacebookApi 
      scope = 'email' 
      ... 
      ... 
     } 
    } 
} 

В качестве примера того, как вернуть email и various public_profile fields смотрите ниже. Обратите внимание:getFacebookResource параметров, например. https://graph.facebook.com/me?fields=id,name,verified,age_range,email"

import grails.converters.JSON 
import org.scribe.model.Token 
import grails.plugin.springsecurity.oauth.OAuthToken 

class SpringSecurityOAuthController { 

    def oauthService 

    def onSuccess = { 
     // Validate the 'provider' URL. Any errors here are either misconfiguration 
     // or web crawlers (or malicious users). 
     if (!params.provider) { 
     renderError 400, "The Spring Security OAuth callback URL must include the 'provider' URL parameter." 
     return 
     } 

     def sessionKey = oauthService.findSessionKeyForAccessToken(params.provider) 
     if (!session[sessionKey]) { 
      renderError 500, "No OAuth token in the session for provider '${params.provider}'!" 
      return 
     } 

     // Create the relevant authentication token and attempt to log in. 
     OAuthToken oAuthToken = createAuthToken(params.provider, session[sessionKey]) 

     Token facebookAccessToken = (Token) session[oauthService.findSessionKeyForAccessToken('facebook')] 

     def facebookResource = oauthService.getFacebookResource(facebookAccessToken , "https://graph.facebook.com/me?fields=id,name,verified,age_range,email") 

     def facebookResponse = JSON.parse(facebookResource?.getBody()) 

     println facebookResponse 

     ... 
     ... 
    } 
} 

public_profile (Default)

общедоступный профиль человека относится к следующим свойствам объекта пользователя по умолчанию:

  • обложка ID
  • имя
  • first_name
  • last_name
  • age_range
  • ссылка
  • пол
  • локаль
  • картинка
  • часовой пояс
  • updated_time
  • проверено
Смежные вопросы