所以,我需要获取主机在OAuth2情况下发送到我网站的授权代码,我是客户端。当主机发回授权代码时,从URL中剥离代码然后将其发回以检索令牌和秘密的正确方法是什么?
我尝试剥离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', 'FileController@cadWithAuth')->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 :(得分:0)
我建议查看现有的库,也就是说,如果你想知道其他开发人员认为正确的实现方式是什么。
Guzzle(因为我看到你已经在使用它了)https://github.com/commerceguys/guzzle-oauth2-plugin
PHPleague(包含非常有用的示例和包的社区)https://github.com/thephpleague/oauth2-client
至于设置一个环境变量来捕获令牌/代码,我认为它是原创的。我只是想(这是我的看法)将功能组合在一起并尽可能消除魔法更容易,也更合乎逻辑。
所以我不会使用环境变量,因为在一个月左右的时间里,我不会轻易记住我设置该变量的位置。因为您可以在应用程序的任何位置访问这些环境变量。
同样的论点也适用于我提供的解决方案,即使用魔法$ _GET ["代码"]来检索您的代码。
TLDR; 如果您不必重新发明轮子,Oauth2客户端可用,请使用它们。 (大多数甚至都有记录,并附带自己的测试\ o /所以你不必写那些)