ccc

Mostrando entradas con la etiqueta Silex: Login. Mostrar todas las entradas
Mostrando entradas con la etiqueta Silex: Login. Mostrar todas las entradas

Silex: Modificación del Vendor para obtener desde una clase el Id de Usuario

En CUsuarios:

    function getUserLoggedId(Application $app) {
        $token = $app['security.token_storage']->getToken();
        if (null !== $token) {
            $user = $token->getUser();
            $app['session']->set(
                'user', array(
                    'user-credentials' => $user
                    ));
            $userid = $app['session']->get('user')["user-credentials"]->getUserId();
        }

        return $userid;
    }

En vendor\symfony\security\Core\User\User.php:

final class User implements AdvancedUserInterface
{
    private $username;
    private $password;
    private $enabled;
    private $accountNonExpired;
    private $credentialsNonExpired;
    private $accountNonLocked;
    private $roles;
    private $userid;

    public function __construct($userid, $username, $password, array $roles = array(), $enabled = true, $userNonExpired = true, $credentialsNonExpired = true, $userNonLocked = true)
    {
        if ('' === $username || null === $username) {
            throw new \InvalidArgumentException('The username cannot be empty.');
        }

        $this->userid = $userid;
        $this->username = $username;
        $this->password = $password;
        $this->enabled = $enabled;
        $this->accountNonExpired = $userNonExpired;
        $this->credentialsNonExpired = $credentialsNonExpired;
        $this->accountNonLocked = $userNonLocked;
        $this->roles = $roles;
    }

   
    public function getUserId()
    {
        return $this->userid;
    }

...

En vendor\silex\silex\src\Silex\Provider\UserProvider.php:
public function loadUserByUsername($username)
    {
        $stmt = $this->conn->executeQuery('SELECT * FROM users WHERE email = ?', array(strtolower($username)));

        if (!$user = $stmt->fetch()) {
            throw new UsernameNotFoundException(sprintf('Email "%s" does not exist.', $username));
        }
               
        return new User($user['id_admin'], $user['email'], $user['password'], explode(',', $user['roles']), true, true, true, true);
    }

Silex: Forzar un login

$usuario =  new User($regLogin[0]["id_admin"], $regLogin[0]["email"], $regLogin[0]["password"], array('ROLE_NORMAL_USER'), true, true, true, true);
$token = new UsernamePasswordToken($usuario, null, 'admin', array('ROLE_NORMAL_USER'));
$app['security']->setToken($token);

if (null !== $token) {
    $user = $token->getUser();
    $app['session']->set(
    'user', array(
    'user-credentials' => $user
          ));
    $userid = $app['session']->get('user')["user-credentials"]->getUserId();
}

Silex: Login en el Admin

web/admin/index.php:
$app->register(new Silex\Provider\SecurityServiceProvider());
$app['security.firewalls'] = array(
    'admin' => array(
        'pattern' => '^/',
        'anonymous' => true,
        'form' => array(
            'login_path' => '/login',
            'check_path' => '/admin/login_check',
            'default_target_path' => '/list_noticias',
            'always_use_default_target_path' => true),
            'logout' => array('logout_path' => '/admin/logout', 'invalidate_session' => true),
        'users' => $app->share(function () use ($app) {
            return new Silex\Provider\UserProvider($app["db"]);
        }),
    )
);

$app->get('/login', function(Request $request) use ($app) {
    return $app['twig']->render('login.twig', array(
                'error' => $app['security.last_error']($request),
                'last_username' => $app['session']->get('_security.last_username'),
    ));
});

$app->get('/', function(Request $request) use ($app) {
    return $app['twig']->render('login.twig', array(
                'error' => $app['security.last_error']($request),
                'last_username' => $app['session']->get('_security.last_username'),
    ));
});

$app->get('/logout', function(Request $request) use ($app) {
// una vez deslogueado que vuelva a mostrar la pantalla de loguearse
return $app->redirect("login", 303);
});

en admin/views/login.twig:
<form action="{{ path('admin_login_check') }}" method="POST">
  <h1>AEMIN</h1>
  <div>
   <input type="text" name="_username" value="{{ last_username }}" class="form-control" placeholder="Nombre de usuario"/>
   </div>
   <div>
     <input type="password" name="_password" class="form-control" placeholder="Contraseña"/>
   </div>
   <div>
    <button type="submit">Iniciar sesion</button>
       <p style="color: red;">
           {{ error | replace({"Bad credentials": "Usuario y/o contraseña incorrectos."})}}
        </p>
    </div>
    <div class="clearfix"></div>
</form>


Si no tienes UserProvider.php tienes que copiarlo en vendor/silex/silex/src/silex/provider.

Para llamar al logout debe hacerse con el path sustituyendo la / por _
<a href="{{ path('admin_logout') }}">SALIR</a>