【问题标题】:How can I write a user provider for HWIOAuthBundle如何为 HWIOAuthBundle 编写用户提供程序
【发布时间】:2014-11-05 14:50:00
【问题描述】:

我想通过社交网络编写登录功能。
如果用户未登录,则将其持久化到数据库中,如果用户存在,则将用户登录。 我应该向我的提供者写什么? 文档状态:

捆绑包需要能够根据 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 的提供程序示例吗?
谢谢

【问题讨论】:

  • 我不知道你是否使用 FOS,但是这个 gist 有一个很好的例子
  • 这是我的问题,我没有使用 FOSuserBundle .. 我手动保留用户
  • 接口只有一个方法,看gist就可以自己实现了
  • 我看不出他们在哪里使用了 OAuthAwareUserProviderInterface。接口的方法是什么?
  • 我发现这个函数是公共函数 loadUserByOAuthUserResponse(UserResponseInterface $response);

标签: mongodb symfony hwioauthbundle


【解决方案1】:

如果你打开 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;
}

【讨论】:

  • 我明白了!我现在所要做的就是为 mongodb 而不是 mysql 设计我的课程,非常感谢
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2011-06-03
  • 2010-09-08
相关资源
最近更新 更多