I use HwioBundle and owner facebook, vk. I need IP user before hwio conect to owner, I try use $ip = $request->getClientIp(); but in class UserProvider I have not request, only respons, calssUserProvider this is service and I do to add service request, this my service :
<service id="app.provider.user_provider" class="%my_user_provider.class%">
<argument type="service" id="fos_user.user_manager" />
<argument type="service" id="request_stack" />
<argument type="collection">
<argument key="facebook">facebookId</argument>
<argument key="vkontakte">vkontakteId</argument>
</argument>
<call method="setFacebookProvider">
<argument type="service" id="geekhub.user.facebook_provider" />
</call>
<call method="setVkontakteProvider">
<argument type="service" id="geekhub.user.vkontakte_provider" />
</call>
</service>
I try many variant but I don't know exactly needed, and this is action:
<?php
namespace UserBundle\Providers;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseClass;
use Symfony\Component\Security\Core\User\UserInterface;
class UserProvider extends BaseClass
{
private $vkontakteProvider;
private $facebookProvider;
public $requestStack;
/**
* Constructor.
*
* @param UserManagerInterface $userManager FOSUB user provider.
* @param array $properties Property mapping.
*/
public function __construct(UserManagerInterface $userManager, $requestStack, array $properties)
{
$this->requestStack = $requestStack;
$this->userManager = $userManager;
$this->properties = array_merge($this->properties, $properties);
$this->accessor = PropertyAccess::createPropertyAccessor();
}
/**
* {@inheritDoc}
*/
public function connect(UserInterface $user, UserResponseInterface $response)
{
$property = $this->getProperty($response);
$username = $response->getUsername();
//on connect - get the access token and the user ID
$service = $response->getResourceOwner()->getName();
$setter = 'set'.ucfirst($service);
$setter_id = $setter.'Id';
$setter_token = $setter.'AccessToken';
//we "disconnect" previously connected users
if (null !== $previousUser = $this->userManager->findUserBy(array($property => $username))) {
$previousUser->$setter_id(null);
$previousUser->$setter_token(null);
$this->userManager->updateUser($previousUser);
}
//we connect current user
$user->$setter_id($username);
$user->$setter_token($response->getAccessToken());
$this->userManager->updateUser($user);
}
/**
* {@inheritdoc}
*/
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$ip_reguestStack = $requestStack->getCurrentRequest()->getClientIP()
$ip = $_SERVER['REMOTE_ADDR'];
$ip_requestStack = $this->requestStack->getCurrentRequest()->getClientIP();
dump($ip, $ip_requestStack);exit;
$username = $response->getUsername();
$email = $response->getEmail();
$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username));
//when the user is registrating
if (null === $user) {
$user = $this->userManager->findUserByEmail($email);
$service = $response->getResourceOwner()->getName();
$setter = 'set' . ucfirst($service);
$setterId = $setter . 'Id';
$setterToken = $setter . 'AccessToken';
if (null === $user) {
$user = $this->userManager->createUser();
$user->$setterId($username);
$user->$setterToken($response->getAccessToken());
$serviceProvider = $service."Provider";
$user = $this->$serviceProvider->setUserData($user, $response);
$this->userManager->updateUser($user);
return $user;
}else {
$user->$setterId($username);
$user->$setterToken($response->getAccessToken());
$serviceProvider = $service."Provider";
$user = $this->$serviceProvider->setUserData($user, $response);
$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;
}
public function setVkontakteProvider(VkontakteProvider $vkontakteProvider)
{
$this->vkontakteProvider = $vkontakteProvider;
}
public function setFacebookProvider(FacebookProvider $facebookProvider)
{
$this->facebookProvider = $facebookProvider;
}
}
now I have
UserProvider.php on line 52:
"10.184.59.34"
UserProvider.php on line 52:
"10.229.34.154"
but in http://myip.com.ua/ my IP 109.227.72.9
And Undefinded varible $requestStack
I use Symfony 2.6.11
If dump $ip = $_SERVER['REMOTE_ADDR'] I have another Ip, not my with connect, maybe hosting server in global variable $_SERVER is the value IP ? And when $this->container I have Notice: Undefined property: UserBundle\Providers\UserProvider::$container How I get IP user who want to be registration in my site ?