2017-07-11 29 views
6

我建立了一個API的Laravel 5.4,使用Laravel護照3進行身份驗證。我所有的API方法返回一個組值總是返回,successerrors(如果有任何錯誤)等更改的Laravel護照/ OAuth的服務器響應

我已經改變了\Illuminate\Auth\AuthenticationException的響應拋出,以適應我的應用程序的其它部分,但是我不確定如何更改各種令牌授予響應的響應,而不會像編輯供應商文件那樣做一些可怕的事情。

+0

這個問題可以利用一些環境和更好的問題,唯一類似它是'但是我不知道如何改變各種代金券授予responses'的響應。還提供一些代碼。 –

回答

1

我認爲你可以使用中間件來改變你的迴應。

從laravel文檔:

&之前之後中間件

無論中間件之前或之後 請求依賴於中間件本身運行。

您可以捕獲響應和重新格式化的響應。

您可以使用laravel的setContent方法設置響應的內容。 Check here

+0

我以爲你可以用中間件來做,但不知道如何開始。這很好,謝謝。 –

+0

你應該得到賞金,出於某種原因,我不知何故把它給了錯誤的人。不知道是否有辦法移動它... –

+0

謝謝你。並沒有問題的賞金。我們在這裏幫助社區。這就是我們的成長。讓我們知道結果。 –

2

你正在嘗試做的,是不是庫支持,所以無論你做什麼會哈克並可能會打破與laravel/passport未來版本的兼容性。

在我看來,你可以只2個選項中進行選擇:

  1. ,而不用聲明護照路線(Passport::routes()),你可以等價路由申報您的自定義方法。這些方法在內部調用Passport類和方法,在將它們返回給用戶之前處理護照返回值。它需要大量的關於護照代碼的挖掘,但同時,如果您只添加一些字段(successerror),那麼在更新庫時應該能夠在不費力的情況下更新代碼。

  2. laravel/passport並對其進行修改,以滿足您的需要。這個解決方案不會像第一個那樣混亂,但是與未來護照的新版本合併可能會很困難。

當然,兩者都不是很大的解決方案。保持標準的護照回覆或使用更合適的圖書館是更好的選擇:如果你問,我認爲他們不可行。

+0

這是一種痛苦。我想到的兩種選擇,我只是希望有一個更好的方法。目前,我有我自己的路由裏面做他們需要發放訪問令牌等等做什麼我希望能夠掛鉤某些東西,或者添加一些中間件來調整響應。 –

+0

@gbalduzzi是對的。修改你的js函數來檢查是否有成功響應。檢查響應中是否存在成功變量**或** expires_in'屬性。 – piotr

-1

另一種方式 - 爲您的目的創建代理路由。

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

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

    return responseCallback($response); 
}); 

其中responseCallback您的自定義響應變性功能。

+0

我偶然給了你賞金,但我不會建議這樣做,因爲它有相當多的開銷。 –

+0

@DanielDewhurst,是的。請注意,如果您將使用「中間件」解決方案並覆蓋「OAuth」路由請求/響應格式,則會導致與第三方客戶端不兼容,因爲他們會期望原始的「OAuth」請求/響應格式。 – tooleks