我有一个ZF2项目,我正在使用SocalNick / ScnSocialAuth(https://github.com/SocalNick/ScnSocialAuth)来启用社交身份验证。
认证流程正常。我已经让用户使用他或她的社交登录进行身份验证(例如,Facebook)。
现在我需要知道如何从我的控制器和视图访问用户的配置文件数据。我怀疑它必须使用HybridAuth模块(也被加载),但我无法找到。
任何人都可以帮助我吗?
答案 0 :(得分:2)
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向我展示这种替代解决方案。
答案 1 :(得分: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
});
然后提取用户的个人资料数据并将其存储在某个地方。
另一种可能性是:ScnSocialAuth的HybridAuth适配器(ScnSocialAuth\Authentication\Adapter\HybridAuth
)为每个支持的服务实现<service>ToLocalUser
方法,因此您可以覆盖ZfcUser的实体以添加一些额外的字段,然后扩展HybridAuth适配器类以覆盖每个这些方法,并使用必要的配置文件数据填充您的ZfcUser实体。