2015-03-31 5 views
1

У меня есть проект ZF2, и я использую SocalNick/ScnSocialAuth (https://github.com/SocalNick/ScnSocialAuth), чтобы включить социальную аутентификацию.Получить данные профиля пользователя после авторизации с помощью SocalNick/ScnSocialAuth

Поток аутентификации в порядке. Я уже получил аутентификацию пользователя с помощью своего социального входа (например, Facebook).

Теперь мне нужно знать, как получить доступ к данным профиля пользователя из моих контроллеров. Я подозреваю, что он должен использовать модуль HybridAuth (который также загружен), но я не мог узнать, как это сделать.

Может ли кто-нибудь мне помочь?

ответ

1

Два из возможных подходов, чтобы получить доступ к этим данным в то время, когда пользователь подписывает вверх:

Вы можете прикрепить прослушиватель событий к registerViaProvider event, который принимает адаптер HybridAuth в качестве параметра. Самый простой способ для достижения этой цели было бы прикрепить его во время вашего модуля onBootstrap, что-то вроде этого:

$sem = $e->getApplication()->getEventManager()->getSharedManager(); 
$sem->attach('ScnSocialAuth\Authentication\Adapter\HybridAuth', 'registerViaProvider', function($event) { 
    $provider = $event->getParam('provider'); 
    // $provider is the HybridAuth provider the user authenticated 
}); 

Затем извлечь данные профиля пользователя и хранить его где-нибудь.

Другая возможность: HybridAuth адаптер ScnSocialAuth (в ScnSocialAuth\Authentication\Adapter\HybridAuth) реализует метод <service>ToLocalUser для каждой поддерживаемой службы, так что вы можете переопределить сущность ZfcUser, чтобы добавить некоторые дополнительные поля, а затем расширить класс адаптера HybridAuth переопределить каждый из этих методов и заполнить ваш ZfcUser объект с необходимыми данными профиля.

+0

Hi Adam Lundrigan. Спасибо за ответ. Как только я попробую оба предложения, я даю обратную связь. –

+0

Спасибо Адам LIndrigan. Они работали. –

2

Решения, предложенные Адамом Лундриганом, в порядке. Но есть еще один, который я хотел бы зарегистрировать здесь.

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

$hybridAuth = $this->getServiceLocator()->get('HybridAuth'); 
// if the user is connected, authenticate will return an instance of the provider adapter 
$adapter = $hybridAuth->authenticate('facebook'); 
if (!$adapter->isUserConnected()) { 
    // do something sensible for a logged out user... 
    return $this->redirect()->toRoute('some-logged-out-route'); 
} 
$userProfile = $adapter->getUserProfile(); 

Я хотел бы поблагодарить Николая Călugăr показал мне это альтернативное решение.

Смежные вопросы