2017-07-11 36 views
6

Tôi đang xây dựng một API trong Laravel 5.4, sử dụng Laravel Passport 3 để xác thực. Tất cả các phương pháp API tôi lại hiện ra một tập hợp các giá trị mà luôn trở về, success, errors (nếu có bất kỳ sai sót) vvThay đổi Laravel Passport/OAuth-Server Responses

Tôi đã thay đổi phản ứng của một \Illuminate\Auth\AuthenticationException ném, để phù hợp với phần còn lại của ứng dụng của tôi Tuy nhiên, tôi không chắc chắn làm thế nào để thay đổi phản ứng của các phản ứng cấp mã thông báo khác nhau, mà không làm một cái gì đó khủng khiếp như chỉnh sửa các tập tin nhà cung cấp.

+0

Câu hỏi này có thể sử dụng một số bối cảnh và câu hỏi hay hơn, điều duy nhất tương tự như vậy là 'tuy nhiên tôi không chắc chắn làm thế nào để thay đổi phản hồi của các phản hồi cấp mã thông báo khác nhau'. Cũng cung cấp một số mã. –

Trả lời

1

Tôi nghĩ bạn có thể sử dụng phần mềm trung gian để thay đổi phản hồi của mình.

Từ tài liệu laravel:

Trước & Sau Middleware

Cho dù một middleware chạy trước hoặc sau khi một yêu cầu phụ thuộc vào trung gian riêng của mình.

Bạn có thể nắm bắt phản hồi và định dạng lại phản hồi.

Bạn có thể sử dụng phương thức setContent của Laravel để đặt nội dung trả lời. Check here.

+0

Tôi nghĩ bạn có thể làm điều đó với phần mềm trung gian, nhưng không biết bắt đầu như thế nào. Điều này là tốt, cảm ơn bạn. –

+0

Bạn có nghĩa vụ phải nhận được tiền thưởng, vì lý do nào đó tôi bằng cách nào đó đã đưa nó cho người sai. Không chắc chắn nếu có một cách để di chuyển nó ... –

+0

Cảm ơn bạn vì điều này. Và không có vấn đề gì về tiền thưởng. Chúng tôi ở đây để giúp cộng đồng. Đây là cách chúng tôi phát triển. Và cho chúng tôi biết kết quả. –

2

Những gì bạn đang cố gắng làm ở đây không được thư viện hỗ trợ, vì vậy bất cứ điều gì bạn làm sẽ bị hack và có thể sẽ phá vỡ khả năng tương thích với các phiên bản sau của laravel/passport.

Theo tôi, bạn chỉ có thể lựa chọn giữa những 2 lựa chọn:

  1. Thay vì các tuyến đường hộ chiếu tuyên bố (Passport::routes()), bạn có thể khai báo các tuyến đường tương đương với phương pháp tùy chỉnh của bạn. Những phương thức này gọi nội bộ các lớp và phương thức hộ chiếu, xử lý các giá trị trả lại hộ chiếu trước khi trả lại cho người dùng. Nó đòi hỏi rất nhiều đào vào mã hộ chiếu nhưng, cùng một lúc, nếu bạn chỉ thêm một số lĩnh vực (success hoặc error) bạn sẽ có thể cập nhật mã của bạn mà không cần nỗ lực quá nhiều khi cập nhật thư viện.

  2. Ngã ba laravel/passport và sửa đổi nó cho phù hợp với nhu cầu của bạn. Giải pháp này không lộn xộn như lần đầu tiên, nhưng việc hợp nhất với các phiên bản hộ chiếu mới trong tương lai có lẽ sẽ khó khăn.

Tất nhiên, cả hai đều không phải là giải pháp tuyệt vời. Giữ các câu trả lời hộ chiếu tiêu chuẩn hoặc sử dụng một thư viện phù hợp hơn là lựa chọn tốt hơn: Tôi cho rằng họ không khả thi nếu bạn đang yêu cầu.

+0

Đó là một nỗi đau. Cả hai lựa chọn tôi nghĩ, tôi chỉ hy vọng có một cách đẹp hơn. Hiện tại tôi có các tuyến đường riêng của mình để thực hiện những gì họ cần làm với việc giao các mã thông báo truy cập, v.v.Tôi đã hy vọng tôi có thể móc vào một cái gì đó, hoặc thêm một số phần mềm trung gian để điều chỉnh phản ứng. –

+0

@gbalduzzi là đúng. Sửa đổi hàm js của bạn để kiểm tra xem có phản hồi thành công hay không. Kiểm tra xem có thuộc tính 'success' variable ** hay **' expires_in' hiện diện không. – piotr

-1

Cách khác - tạo các tuyến proxy cho mục đích của bạn.

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

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

    return responseCallback($response); 
}); 

Ở đâu responseCallback chức năng sửa đổi phản hồi tùy chỉnh của bạn.

+0

Tôi đã cho bạn tiền thưởng một cách tình cờ, nhưng tôi sẽ không đề nghị làm điều này vì nó khá nhiều chi phí. –

+0

@DanielDewhurst, vâng. Lưu ý, nếu bạn sẽ sử dụng giải pháp "phần mềm trung gian" và ghi đè định dạng yêu cầu/phản hồi tuyến đường "OAuth", điều này sẽ gây ra sự không tương thích với ứng dụng khách của bên thứ ba vì chúng mong đợi định dạng yêu cầu/phản hồi "OAuth" gốc. – tooleks

Các vấn đề liên quan