使用 SocalNick/ScnSocialAuth 验证后获取用户的个人资料数据

Get user's profile data after auth with SocalNick/ScnSocialAuth

我有一个 ZF2 项目,我正在使用 SocalNick/ScnSocialAuth (https://github.com/SocalNick/ScnSocialAuth) 来启用社交身份验证。

认证流程正常。我已经让用户使用他或她的社交登录名(例如,Facebook)进行身份验证。

现在我需要知道如何从我的控制器和视图访问用户的个人资料数据。我怀疑它一定是在使用 HybridAuth 模块(也已加载),但我不知道如何使用。

谁能帮帮我?

在用户注册时访问该数据的两种可能方法:

您可以将事件侦听器附加到 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
});

然后提取用户的个人资料数据并将其存储在某个地方。

另一种可能性是:ScnSocialAuth 的 HybridAuth 适配器 (ScnSocialAuth\Authentication\Adapter\HybridAuth) 为每个支持的服务实现了一个 <service>ToLocalUser 方法,因此您可以覆盖 ZfcUser 的实体以添加一些额外的字段然后扩展 HybridAuth 适配器 class 覆盖每个方法并使用必要的配置文件数据填充 ZfcUser 实体。

Adam Lundrigan 提出的解决方案是可以的。但是还有一个我想在这里注册。

可以从控制器的操作中调用以下代码:

    $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();

感谢 Nicholas Calugar 向我展示了这个替代解决方案。