我想通过社交网络编写一个登录功能。
如果用户未登录,则将其保存到数据库中;如果用户存在,则登录该用户。
我应该在我的提供商中写入什么内容?
文件状态:
该捆绑包需要一个能够根据以下内容加载用户的服务
oauth 端点的用户响应。如果您有定制服务
应该实现接口:
HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface。
这就是我写的然后卡住了
<?php
namespace ng\MyBundle\Controller\Listeners;
use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface;
class OAuthUserProvider implements OAuthAwareUserProviderInterface
{
}
你能告诉我应该使用哪些方法吗?
有人能给我一个不使用 FOSuserBundle 的提供商示例吗?
Thanks
如果您打开 OAuthAwareUserProviderInterface 您可以看到它只有一种方法:
/**
* Loads the user by a given UserResponseInterface object.
*
* @param UserResponseInterface $response
*
* @return UserInterface
*
* @throws UsernameNotFoundException if the user is not found
*/
public function loadUserByOAuthUserResponse(UserResponseInterface $response);
下面有一个关于如何实现它的示例,当然在您的情况下,您应该调用实体管理器,并按照您设计的方式访问用户。
/**
* {@inheritdoc}
*/
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$username = $response->getUsername();
$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username));
//when the user is registrating
if (null === $user) {
$service = $response->getResourceOwner()->getName();
$setter = 'set'.ucfirst($service);
$setter_id = $setter.'Id';
$setter_token = $setter.'AccessToken';
// create new user here
$user = $this->userManager->createUser();
$user->$setter_id($username);
$user->$setter_token($response->getAccessToken());
//I have set all requested data with the user's username
//modify here with relevant data
$user->setUsername($username);
$user->setEmail($username);
$user->setPassword($username);
$user->setEnabled(true);
$this->userManager->updateUser($user);
return $user;
}
//if user exists - go with the HWIOAuth way
$user = parent::loadUserByOAuthUserResponse($response);
$serviceName = $response->getResourceOwner()->getName();
$setter = 'set' . ucfirst($serviceName) . 'AccessToken';
//update access token
$user->$setter($response->getAccessToken());
return $user;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)