使用 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 向我展示了这个替代解决方案。
我有一个 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 向我展示了这个替代解决方案。