2016-01-14 3 views
0

У меня проблема с HWIOAuthBundle и аутентификацией Google, я не могу завершить работу над OAuthProvider. После данных флеша я хочу объект объекта возврата, который я видел где-то в stackoverflow. Но когда я возвращаю $ obj; я ловлю ошибку:HWIOAuthBundle прослушиватель полная работа

Catchable Ошибка: Аргумент 2 передается HWI \ Bundle \ OAuthBundle \ Security \ ядра \ Authentication \ маркеров \ OAuthToken :: __ конструкт() должен быть массив типа, целое данное, называется в/вар/WWW/Integra/поставщик/HWI/OAuth-расслоение/Безопасность/Основной/Authentication/Поставщик/OAuthProvider.php на линии 109 и определил

Построить этот класс:

public function __construct($accessToken, array $roles = array()) 
{ 
    parent::__construct($roles); 

    $this->setRawToken($accessToken); 

    parent::setAuthenticated(count($roles) > 0); 
} 

Тогда я вернуться:

return new JsonResponse(['accessToken' => $user->getToken(), 'Roles' => $user->getRoles()]); // I catch error what it loadUserByOAuthUserResponse() must return a UserInterface 

класс OAuthProvider расширяет OAuthUserProvider {

protected $container, $em; 

    public function __construct(\Doctrine\ORM\EntityManager $em, $container) 
    { 
     $this->container = $container; 
     $this->em = $em; 
    } 


public function loadUserByOAuthUserResponse(UserResponseInterface $response) 
{ 
    $email = $response->getEmail(); 

    if ($email === null) { 
     throw new NotFoundHttpException("User email adress not found", 404); 
    } 

    $name = $response->getFirstName(); 
    $surname = $response->getLastName(); 
    $photo = $response->getProfilePicture(); 



    $repository = $this->em->getRepository('IdamasBillingBundle:User'); 
    $user = $repository->searchByNameSurnameEmail($email); 

    if($user){ 

     $login = new User(); 
     $login->setEmail($email); 

     $session = $this->container->get('session'); 
     $session->set('login', $login); 

     return $user; 

    } else { 

     $user = new User(); 
     $user->setEmail($email); 
     $user->setName($name); 
     $user->setSurname($surname); 
     $user->setPosition('Just user'); 
     $user->setRoles(1); 
     $user->setPhoto($photo); 

     $this->em->persist($user); 
     $this->em->flush(); 

     $session = $this->container->get('session'); 
     $session->set('login', $user); 

//  return $user;f 
     return new JsonResponse(['accessToken' => $user->getToken(), 'Roles' => $user->getRoles()]); 
    } 

    //return new RedirectResponse("/billing"); 
} 

} 

Как я могу сделать это, что перенаправление на страницу входа заполнить?

+0

'$ user-> setRoles ([]);' – malcolm

+0

функция setRoles государственной ($ ролей) { $ this- > role = $ role; return $ this; } –

+0

И вы устанавливаете роли в '1', это целое! Роли должны быть массивом в вашем объекте 'User',' getRoles' должен возвращать массив, чтобы добавить роль в метод 'addRole()', также почему вы создаете нового пользователя, если пользователь существует? – malcolm

ответ

0

User объект должен иметь roles свойства, и оно должно быть массивом:

class User { 

    protected $roles = []; 

    public function getRoles() { 
     return $this->roles; 
    } 

    public function addRole($role) { 
     $this->roles[] = $role; 
    } 

} 
+0

как я могу сохранить роли массива? Возможно, нужны ORM-опции для массива? –

+0

почему это должен быть массив? –

+0

Итак, вы не знаете, как сохранить массив в db, вы не знаете, почему он должен быть массивом, поэтому вам просто нужна одна роль для каждого пользователя, вам действительно не нужны роли на пользователе. Поэтому я понятия не имею, почему вы устанавливаете «1» при создании нового пользователя. Доброй ночи. – malcolm

 Смежные вопросы

  • Нет связанных вопросов^_^