5 Stimmen

Erstellen/Anmelden eines Benutzers von einem mobilen Gerät mit Symfony2 und FOSUserBundle

Erstens möchte ich einen Benutzer erstellen, der eine Post-Request von meiner Android-App an den Server sendet, der Symfony2 und das FOSUserBundle verwendet.

Schließlich möchte ich einen Benutzer über die mobile Anwendung anmelden und dann Daten mit dem Server austauschen.

Ich weiß, wie man eine Post-Request auf dem Android-Gerät implementiert. Aber ich weiß nicht, wie ich das FOSUserBundle und die security.yml usw. konfigurieren muss, um meine Bedürfnisse zu erfüllen. Obwohl ich ein _csrf_token oder etwas brauchen könnte und ich weiß nicht, woher es zu bekommen.

Ich habe die Authentifizierungsmethode bereits von "form_login" auf "http_basic" geändert und denke, dass dies der einfachste Weg ist, die Authentifizierung durchzuführen (mit https, um die Passwörter zu sichern).

Aber was muss ich jetzt tun, um das Erstellen und Anmelden von Aktionen ohne Formulare zu erreichen? Was muss ich in den Post-Request auf dem mobilen Gerät eingeben?

Danke für alle Ideen, Kommentare und Lösungen!!

3voto

Dieter Punkte 1670

Eine späte Antwort, aber sie könnte helfen. Ich arbeite gerade an einer ähnlichen Situation und habe das hier:

In security.yml

security:
providers:
    fos_userbundle:
      id: fos_user.user_manager

firewalls:
    main:
        pattern: ^/
        stateless: true
        http_basic:
            realm: "API"

access_control:
    - { path: /, role: ROLE_USER }

role_hierarchy:
    ROLE_OWNER:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

In config.yml:

fos_user:
db_driver: orm
firewall_name: main
user_class: <your user class>

In meiner Test-Methode:
Referenz: Authentifizierung für eine Symfony2-Api (für den Einsatz in mobilen Anwendungen)

public function testAuthentication() 
{
    $client = $this->createClient();

    // not authenticated
    $client->request('GET', '<url>');
    $this->assertEquals(401, $client->getResponse()->getStatusCode());

    // authenticated
    $client->request('GET', '<url>', array(), array(), array(
        'PHP_AUTH_USER' => '<username from your database>', 
        'PHP_AUTH_PW' => '<password>'
    ));
    $this->assertEquals(200, $client->getResponse()->getStatusCode());

}

Für die Kommunikation mit dieser API würde ich Folgendes vorschlagen cURL o Buzz

Ich hoffe, das hilft!

Zum Wohl,

Dieter

2voto

Zied R. Punkte 4924

Ich hatte das gleiche Problem, aber ich fand die Lösung für die Registrierung: (der Benutzer gibt seinen Benutzernamen, seine E-Mail-Adresse und sein Passwort ein)

  1. In dem UserController Ihres UserBundle ( src/Projekt/BenutzerBundle/Controller/DefaultController ) eine neue Funktion definieren registerAction() :

     public function registerAction()
    {
        $user = new User();
    
        $request  = $this->getRequest();
        $username = $request->request->get('username');
        $password= $request->request->get('password');
        $email= $request->request->get('email');
    
      $factory = $this->get('security.encoder_factory'); 
    
      $encoder = $factory->getEncoder($user); 
      $password = $encoder->encodePassword($password, $user->getSalt()); 
      $user->setPassword($password); 
    
        $user->setUsername($username);
        $user->setUsernameCanonical($username);
        $user->setEmail($email);
        $user->setEmailCanonical($email);
        $user->setEnabled(true);
        $user->setLocked(false);
        $user->setExpired(false);
    
        $user->setCredentialsExpired(false);
        $em = $this->get('doctrine')->getEntityManager();
        $em->persist($user);
        $em->flush();
       /* $response = new Response(json_encode(array('user' => $tes)));
         $response->headers->set('Content-Type', 'application/json');
    
          return $response;*/
          return new JsonResponse('good');
    }

    }

und vergessen Sie nicht, zu importieren:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Telifoon\UserBundle\Entity\User;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
  1. in UserBundle/Ressourcen/config/routing.yml folgende Route hinzufügen:

    eintrag_post Muster: /v1/api/register Voreinstellungen: { _controller: ProjectUserBundle:Default:register } Anforderungen: _method: POST

  2. Mein Unternehmen ( src/Projekt/BenutzerBUndle/Entität/Benutzer ) ist:

    use FOS\UserBundle\Model\User as BaseUser;
    
    /**
     * User
     */
    class User extends BaseUser
    {
        public function __construct()
        {
            parent::__construct();
            // your own logic
        }
    }
  3. Beim Test wird der Benutzer korrekt in meine Datenbank aufgenommen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X