8

Plugin Socialiate cung cấp triển khai cho OAuth trong Laravel, nhưng dường như nó được thiết kế cho hầu hết cho mục đích cho phép họ không phải tạo tài khoản người dùng trên trang web của riêng bạn.Tôi làm cách nào để quản lý mã thông báo làm mới OAuth với Laravel?

Tôi đang tạo một ứng dụng giúp quản lý tài khoản Youtube của họ, nghĩa là phạm vi yêu cầu xác thực rộng hơn (dễ thay đổi) nhưng tôi cũng cần mã thông báo làm mới (so với mã thông báo truy cập) cho dài hạn truy cập vào tài khoản của họ.

Có gói nào ở ngoài cho Laravel đã xử lý việc này không? Tôi đã không thể tìm thấy một, nhưng có lẽ tôi đang tìm kiếm điều sai trái.

Nếu không, tôi nên tiếp cận điều này như thế nào? Khi tôi viết mã tương tác với API của Youtube, tôi chỉ cần kiểm tra xem mã thông báo truy cập đã hết hạn chưa và nếu có, hãy viết hàm thực hiện yêu cầu HTTP để nhận mã mới với mã thông báo làm mới mà tôi đã lưu trữ trong cơ sở dữ liệu? Và tôi đoán cũng mở rộng Socialite để lấy mã thông báo làm mới?

Tôi cảm thấy như có một cách tốt hơn không liên quan đến việc tái phát minh ra bánh xe.

Trả lời

2

Rất khó để tìm thông tin, một phần vì gói OAuth2-server cho Laravel cung cấp giải pháp OAuth riêng của mình, hầu hết là kết quả tìm kiếm.

Tôi nghĩ câu trả lời hay nhất là viết YoutubeProvider cho Socialite của riêng bạn. Đây là hướng dẫn: https://medium.com/laravel-news/adding-auth-providers-to-laravel-socialite-ca0335929e42#.6bn8i2wz4

Sẽ là một nỗi đau khi thay đổi Socialite để bắt đầu làm việc với mã thông báo làm mới, vì vậy tôi nghĩ tuyến đường tốt nhất sẽ cho YoutubeProvider có cuộc gọi bổ sung tới hàm getRefreshToken mới ở cuối hàm getAccessToken hiện có. Thay đổi cả mã truy cập và mã thông báo làm mới để lưu mã thông báo đã truy xuất vào cơ sở dữ liệu, vì Socialite sẽ không cung cấp cho bạn tùy chọn truy cập mã thông báo làm mới để lưu mã trong lớp trình trợ giúp/bộ điều khiển.

Tạo mô hình Bảng và bảng cơ sở dữ liệu và lưu trữ cả mã thông báo truy cập và làm mới trong đó với mối quan hệ với Mô hình người dùng.

Khi bạn viết trình trợ giúp YoutubeService, bạn cần có khả năng thực hiện cuộc gọi API bằng mã thông báo truy cập và biết làm mới bằng mã thông báo làm mới nếu nhận được thông báo lỗi đã hết hạn/không hợp lệ.

thư viện API của Google cho PHP dường như để xử lý này tự động với $client->setAccessType("offline"): https://developers.google.com/api-client-library/php/auth/web-app

nhưng ngay sau khi bạn bắt đầu cần thẻ refresh cho một cái gì đó khác hơn so với Google, bạn sẽ được viết mã đó anyway nếu nhà cung cấp mới cũng không có thư viện. Ở phía trên, thư viện này có một dịch vụ đặc biệt cho Youtube, vì vậy nó sẽ xử lý tất cả các cuộc gọi API đến Youtube mà bạn có thể cần. Tôi không chắc chắn hoàn toàn như thế nào bằng cách sử dụng thư viện này sẽ lưới với Socialite, vì Socialite dường như đã làm rất nhiều những gì thư viện này không. Bạn có thể sẽ tạo ra một số loại ủy quyền dự phòng trong lớp YoutubeService của bạn trừ khi bạn thực sự muốn bắt đầu tùy chỉnh mọi thứ.

Có thể đáng xem xét việc xóa Socialite khỏi phương trình hoàn toàn và sử dụng thư viện của Google khi nói đến dịch vụ của họ.

14

Đã lâu rồi kể từ khi câu hỏi này được truy cập lần cuối và thấy rằng đây là kết quả đầu tiên của Google, tôi muốn nói: Điều này hiện có thể với Socialite.

Khi bạn chuyển hướng người dùng tới Google, thiết access_type-offline với phương pháp with() khi chuyển hướng, như thế này:

return Socialite::driver('google') 
     ->scopes() // For any extra scopes you need, see https://developers.google.com/identity/protocols/googlescopes for a full list; alternatively use constants shipped with Google's PHP Client Library 
     ->with(["access_type" => "offline", "prompt" => "consent select_account"]) 
     ->redirect(); 

Điều này sẽ làm cho Google trả về một dấu hiệu làm mới.

+0

Đây phải là câu trả lời hàng đầu tbh –

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