2017-07-11 84 views
6

Buduję API w Laravel 5.4, używając uwierzytelniania Laravel Passport 3. Wszystkich moich metod API zwraca zestaw wartości, które są zawsze zwracane, success, errors (jeśli są jakieś błędy) itdZmienianie odpowiedzi Laravel Passport/OAuth-Server

Zmieniłem odpowiedź na \Illuminate\Auth\AuthenticationException rzutów, aby pasowały do ​​reszty mojego app jednak nie jestem pewien, jak zmienić odpowiedź różnych odpowiedzi na tokena, nie robiąc czegoś strasznego, jak edytowanie plików dostawcy.

+0

To pytanie może używać kontekstu i lepszego pytania, jedyną rzeczą, która jest podobna, jest "jednak nie jestem pewien, jak zmienić odpowiedź na różne odpowiedzi o przyznaniu tokena". Podaj także kod. –

Odpowiedz

1

Myślę, że możesz użyć oprogramowania pośredniego do zmiany odpowiedzi.

Z dokumentacji laravel:

Przed & Po Middleware

To czy middleware biegnie przed lub po prośba zależy od samego middleware.

Możesz przechwycić odpowiedź i ponownie sformatować odpowiedź.

Możesz użyć metody laravel setContent, aby ustawić treść w odpowiedzi. Check here.

+0

Pomyślałem, że możesz to zrobić za pomocą oprogramowania pośredniego, ale nie wiesz od czego zacząć. To dobrze, dziękuję. –

+0

Powinieneś dostać nagrodę, z jakiegoś powodu w jakiś sposób podałem ją niewłaściwej osobie. Nie wiem, czy istnieje sposób, aby go przenieść ... –

+0

Dziękuję za to. I żadnych problemów z nagrodą. Jesteśmy tutaj, aby pomóc społeczności. Tak właśnie się rozwijamy. I daj nam znać wynik. –

2

To, co próbujesz zrobić, nie jest obsługiwane przez bibliotekę, więc cokolwiek zrobisz, będzie zhackowane i prawdopodobnie zepsuje zgodność z przyszłymi wersjami laravel/passport.

Moim zdaniem, można wybierać tylko między tymi 2 opcje:

  1. Zamiast deklarujących trasach paszportowych (Passport::routes()) można zadeklarować równoważne trasy do swoich metod niestandardowych. Ta metoda wewnętrznie wywołuje klasy i metody Passport, przetwarzając zwracane wartości przed zwróceniem ich do użytkownika. Wymaga to dużo wkopania w kod paszportowy, ale jednocześnie, jeśli dodasz tylko kilka pól (success lub error), powinieneś być w stanie zaktualizować swój kod bez zbytniego wysiłku przy aktualizacji biblioteki.

  2. Widelec laravel/passport i dostosuj go do własnych potrzeb. To rozwiązanie nie jest tak niechlujne jak pierwsze, ale połączenie z nowymi wersjami paszportu w przyszłości prawdopodobnie będzie trudne.

Oczywiście oba nie są świetnymi rozwiązaniami. Dotrzymywanie standardowych odpowiedzi na paszport lub używanie bardziej odpowiedniej biblioteki to lepsze opcje: Zakładam, że nie są wykonalne, jeśli pytasz.

+0

To jest ból. Obie opcje, o których myślałem, miałem tylko nadzieję, że jest lepszy sposób. Obecnie mam własne trasy, które robią, co trzeba, aby rozdawać tokeny dostępu itp.Miałem nadzieję, że coś wpadnę lub dodaję oprogramowanie pośredniczące, aby dostosować odpowiedź. –

+0

@gbalduzzi ma rację. Zmodyfikuj funkcję js, która sprawdza, czy istnieje odpowiedź na sukces. Sprawdź, czy w odpowiedzi znajduje się właściwość 'success' variable ** lub **' expires_in'. – piotr

-1

Inny sposób - utwórz trasy proxy dla swoich celów.

Route::post('custom-auth/token', function (Request $request) { 
    $proxy = Request::create('oauth/token', 'POST', $request->request->input()); 

    $response = app()->handle($proxy); 

    return responseCallback($response); 
}); 

Gdzie responseCallback Twoja niestandardowa funkcja modyfikatora odpowiedzi.

+0

Dałem ci nagrodę przez przypadek, ale nie sugerowałbym tego, ponieważ jest to dość duże obciążenie. –

+0

@DanielDewhurst, yeah. Weź pod uwagę, że jeśli użyjesz rozwiązania "middleware" i zastąpisz formaty żądania/odpowiedzi tras "OAuth", spowoduje to niekompatybilność z klientami zewnętrznymi, ponieważ oczekują oryginalnych formatów żądania/odpowiedzi "OAuth". – tooleks