#API – Pobieranie użytkowników z bazy

Mija już 4 tydzień od rozpoczęcia prac. Szczerze mówiąc, miałem nadzieję, że prace nad projektem będą szły trochę szybciej i według moich założeń już miałem kończyć tworzenie API, a w sumie dopiero zacząłem. Ale i tak powinienem się wyrobić z projektem na czas. Napotkałem ostatnio kilka problemów i trudności, więc nie działo sie zbyt wiele w kodzie. Ten post będzie krótki, ale postaram się nadrobić troche w weekend.

Cały wolny czas w tym tygodniu poświęciłem na API. Efekty większej części moich prac przedstawię po weekendzie. Kończę aktualnie pierwszy kontroler, jest to kontroler dokumentów. Miałem problem z uzyskaniem numeru id użytkownika. Token JWT przechowuje jedynie nazwę użytkownika. Z tego, co wiem, da się to rozwiązać pisząc własną usługę do JWT, ale nie chcę się w to na razie bawić, bo i tak mam już dużo do ogarnięcia.

Próbowałem rozwiązać ten problem łącząc tabele relacjami w Doctrine, ale pobierając użytkownika po nazwie, nie dostawałem obiektu, a tablicę, na której nie mogłem wykonać metody getDocuments. Zdecydowałem się na najprostsze rozwiązanie. Pobieram z bazy id po nazwie. Jedyny minus, to taki, że muszę za każdym razem wykonać o jedno zapytanie do bazy więcej, ale już trudno.

Kolejnym problemem, z którym musiałem się zmierzyć, to dolegliwości związane ze zbyt długim przebywaniem przed komputerem. Przez projekt, więcej czasu spędzam w pozycji siedzącej. Jestem osobą, która lubi ruch i nigdy nie miałem tego typu dolegliwości, ale widocznie ostatnio trochę przegiąłem. Po basenie wszedł mi ból w kręgosłup, który chwilami jest nie do wytrzymania. Dokończę API i chyba będzie pora na kilkudniową przerwę.

Wracając do głównego tematu:

W poście o konfiguracji JWT, korzystałem ze statycznych użytkowników. Wiadomo, że w tego typu aplikacji musi być dostępna rejestracja, więc najlepiej zapisywać użytkowników w bazie.

Wszystkie tabele mam juz w bazie, oraz mam stworzone Entity User, więc wystarczy dopisać trochę kodu.

W pierwszej kolejności muszę dodać UserInterface do User Entity:

<?php

namespace ApiBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

//...
class User implements UserInterface

UserInterface wymaga 3 metod:

    public function getRoles()
    {
        return array('ROLE_USER');
    }

    public function getSalt()
    {
        return null;
    }

    public function eraseCredentials()
    {
    }

W mojej aplikacji, nie mają one znaczenia, ale są wymagane, więc muszę je dodać.

Następnie muszę dodać dostawcę, oraz ustalić sposób szyfrowania hasła w security.yml

security:
    encoders:
        ApiBundle\Entity\User:
            algorithm: bcrypt
            cost: 12
    providers:
        our_db_provider:
            entity:
                class: ApiBundle:User
                property: username

I to w zasadzie wszystko, pozostało sprawdzić, czy wszystko działa, generując nowy token z loginem i hasłem z bazy.

Pozdrawiam!
MTK

 

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑