2017-05-22 37 views
1

因此,我需要獲取主機發送到我的網站的授權碼,這是我在客戶端的OAuth2情況。當主機發回授權代碼時,從URL中剝離代碼然後將其發回以獲取令牌和祕密的正確方法是什麼?在Laravel獲取OAuth2的令牌

我試過剝離htaccess中的代碼,並使用下面的代碼將其存儲爲環境變量,但這並不是正確存儲環境變量。

htaccess的

RewriteCond %{QUERY_STRING} ^code=(.*)$ 
RewriteRule^- [E=MY_AUTH:%1] 
RewriteCond %{QUERY_STRING} ^code=(.*)$ 
RewriteRule ^(.*) https://www.example.com/cadWithAuth? [L] 

路由器

Route::get('/cadWithAuth', '[email protected]')->name('files.cadWithAuth'); 

控制器

public function cadWithAuth() 
{ 
    $authCode = getenv('MY_AUTH'); 
    $authID = getenv('OAUTH_CLIENT_ID'); 
    $authSecret = getenv('OAUTH_CLIENT_SECRET'); 
    $client = new Client(); //GuzzleHttp\Client 
    $result = $client->post('https://oauth.hostsite.com/oauth/token', [ 
     'form_params' => [ 
      'grant_type' => 'authorization_code', 
      'code' => $authCode, 
      'client id' => $authID, 
      'client_secret' => $authSecret 
     ] 
    ]); 

    return response()->json($result); 
} 

回答

0

我建議在尋找現有的庫,也就是說,如果你想了解其他的開發者認爲適當的方式執行的東西是。

至於設置環境變量捕獲令牌/代碼,我認爲它是原創的。我只是想(所以這是我的觀點),將功能組合在一起並儘可能地去除魔法更簡單更合理。

所以我不會使用環境變量,因爲在一個月左右我不會輕易記住我設置變量的位置。正如你可以在應用程序的任何地方訪問這些環境變量。

這個論點也適用於我提供的解決方案,即使用魔術$ _GET [「code」]來檢索您的代碼。

TLDR;如果你不需要重新發明輪子,Oauth2客戶端可以使用它們。 (大多數甚至記錄在案,並帶有自己的測試\ o /所以你不必寫這些)

+0

我欣賞評論,我確實看着gu。。但是,我發現文檔和解釋是不可接受的 - 我覺得php和laravel是正常的。如果我確實能夠實現這一目標,那麼它對我來說就像一個黑盒子,我從來不知道到底發生了什麼。 –

+0

我會給你一個很好的例子。在垃圾readMe中,有一個配置變量需要用戶名和密碼。通常,在OAuth2中,用戶被路由到主機的登錄名,客戶端將看不到該名稱和密碼。那麼,這是爲什麼呢? 也沒有解釋授權代碼以及讓用戶登錄到主機,獲取和授權代碼,獲取令牌或其他任何東西的過程。 readMe開始,就好像用戶只需要一個令牌一樣。 –

+0

稍後在自述文件中,他們解釋說您可以使用這些對象來檢索和存儲令牌 – Dymen1