2017-07-10 17 views
6

Tôi đang xây dựng một API và tôi đang sử dụng Laravel Passport để xác thực.Làm cách nào để tạo một mã thông báo cho Ứng dụng khách cấp quyền mật khẩu bằng cách sử dụng Laravel Passport?

API đang được sử dụng cho ứng dụng dành cho thiết bị di động của chúng tôi, vì vậy, chúng tôi đang sử dụng Ứng dụng khách cấp mật khẩu.

Mọi thứ hoạt động tốt và người dùng có thể đăng nhập để nhận mã thông báo truy cập. Chúng tôi đã tạo một điểm cuối đăng ký cho phép người dùng đăng ký. Chúng tôi cũng cần API để trả về mã thông báo truy cập tại thời điểm này.

Xem qua các tài liệu không có cách nào để tạo mã thông báo truy cập theo chương trình.

Làm cách nào để tạo mã thông báo truy cập cho ứng dụng Password Grant Client trong bộ điều khiển của tôi? Tôi rõ ràng không muốn thực hiện một yêu cầu HTTP đến API của riêng tôi để có được nó.

Tôi biết tôi có thể sử dụng Ứng dụng khách cấp quyền truy cập cá nhân và gọi createToken trên mẫu người dùng, nhưng điều đó có nghĩa là mã thông báo truy cập được liên kết với một Ứng dụng khách khác. Điều này dường như không đúng với tôi.

Trả lời

0

Tôi biết tôi có thể sử dụng một khách hàng cá nhân truy cập Grant và gọi createToken trên mô hình người dùng, nhưng điều đó có nghĩa là các thẻ truy cập được liên kết với một khách hàng khác nhau

không chắc chắn những gì bạn có nghĩa là bằng cách đó, bạn có thể giải thích thêm?

Bây giờ đây không phải là lý tưởng nhưng bạn có thể có thể tiêm \League\OAuth2\Server\Grant\PasswordGrant và sử dụng

respondToAccessTokenRequest(ServerRequestInterface $request 
          ResponseTypeInterface $responseType, 
          \DateInterval $accessTokenTTL) 

bạn sẽ phải xây dựng tất cả các đối tượng, nhưng đây là phương pháp nào chỉ cho mật khẩu mà trả về bất kỳ thông tin thẻ.

2

Tôi đã đùa giỡn với Hộ chiếu trong một vài tuần nay và từ những gì tôi đã thấy trong tài liệu, nó không phơi bày nhiều phương pháp mà nó sử dụng để tạo mã thông báo. Mặc dù bạn có thể không dễ dàng "tạo mã thông báo truy cập cho ứng dụng Password Grant Client trong trình điều khiển của tôi" - những gì bạn có thể làm là sử dụng Route::dispatch để chuyển tiếp yêu cầu mã thông báo đến đường dẫn Hộ chiếu Mật khẩu.

Để làm điều này trong bộ điều khiển bạn đang sử dụng để phát hành thẻ, sử dụng AuthenticatesUsers đặc điểm, do đó bạn có quyền truy cập vào các tuyến đường Password Grant, tạo một yêu cầu, và công văn mà yêu cầu con đường Mật khẩu Grant:

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class IssueTokensController extends Controller 
{ 

    use AuthenticatesUsers; 

    protected function issueApiToken(Request $request) 
    { 
     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create(
      '/oauth/token', 
      'post' 
     ); 
     return Route::dispatch($tokenRequest); 
    } 

} 

Phương pháp này tất nhiên yêu cầu bạn phải thiết lập Hộ chiếu và Ứng dụng cấp mật khẩu.

Câu trả lời này được dựa tắt của một câu trả lời cho một câu hỏi tương tự bởi Raymond Lagonda - xem https://stackoverflow.com/a/40433000/4991377

1
Try something like this 
namespace App\Http\Controllers\Api; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use App\User; 

class UserController extends Controller 
{ 

    //use AuthenticatesUsers; 
    protected function login(Request $request) 
    { 

     $request->request->add([ 
       'grant_type' => 'password', 
       'client_id'  => '3', 
       'client_secret' => '6BHCRpB4tpXnQvC1DmpT7CXCSz7ukdw7IeZofiKn', 
       'scope' => '*' 
      ]); 

     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create('/oauth/token','post'); 
     return Route::dispatch($tokenRequest); 
    } 

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