php authentication login oauth silex

php - Marco Silex: utilizando autenticación OAuth y Básica



authentication login (0)

en mi proyecto actual de Silex, me gustaría realizar un inicio de sesión a través de Oauth y de inicio de sesión básico. Para OAuth, estoy usando una extensión Silex ( https://github.com/gigablah/silex-oauth ). Lamentablemente, ahora tengo problemas para integrar el inicio de sesión básico. Mi opinión es que tengo que crear un proveedor de usuario personalizado que proporcione OAuth y contraseña a través de DB, pero no sé cómo hacerlo realidad.

En este punto, tengo una mezcla realmente fea de dos proveedores de usuarios. Para mí, es lógica, pero no funcionará. Creo que estoy fuera de la pista, por lo que sería muy agradable, si me pueden dar algunos consejos, lo estoy intentando desde hace unos días ...

Mi proveedor de usuario:

<?php namespace Core; use Symfony/Component/Security/Core/User/UserProviderInterface; use Symfony/Component/Security/Core/User/UserInterface; use Symfony/Component/Security/Core/User/User; use Symfony/Component/Security/Core/Exception/UsernameNotFoundException; use Symfony/Component/Security/Core/Exception/UnsupportedUserException; use Doctrine/DBAL/Connection; class UserProvider implements UserProviderInterface { private $conn; private $oauth; public function __construct($oauth = null) { global $app; if($oauth) { $this->oauth = $oauth; } $this->conn = $app[''db'']; } /*public function loadAllUsers() { $users = $this->conn->executeQuery(''SELECT * FROM users'')->fetchAll(); $users_object = array(); foreach ($users as $user) { if (!empty($user[''username''])) { $users_object[$user[''username'']] = array($user[''password''], $user[''firstname''], $user[''lastname''], explode('','', $user[''roles''])); } } $oauth = (array)$this->oauth; print_r($oauth->users); if (count($oauth[''users'']) > 0 ) { print_r($this->oauth); } if ($this->oauth) { if (count($oauth[''users''])) { return $this->oauth; } else { } return $users_object; } else { return $users_object; } }*/ public function loadUserByOAuthCredentials($token) { return $this->oauth->loadUserByOAuthCredentials($token); } public function loadUserByUsername($username) { if ($this->oauth->loadUserByUsername($username)) { return $this->oauth->loadUserByUsername($username); } else { $stmt = $this->conn->executeQuery(''SELECT * FROM users WHERE username = ?'', array(strtolower($username))); if (!$user = $stmt->fetch()) { throw new UsernameNotFoundException(sprintf(''Username "%s" does not exist.'', $username)); } return new User($user[''username''], $user[''password''], explode('','', $user[''roles'']), true, true, true, true); } } public function refreshUser(UserInterface $user) { if (!$user instanceof User) { throw new UnsupportedUserException(sprintf(''Instances of "%s" are not supported.'', get_class($user))); } return $this->loadUserByUsername($user->getUsername()); } public function supportsClass($class) { return $class === ''Symfony/Component/Security/Core/User/User''; } }

Gracias de antemano, si necesita más información, por favor dígame. thoras