在Laravel

时间:2017-05-22 18:45:26

标签: php .htaccess oauth oauth-2.0

所以,我需要获取主机在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);
}

1 个答案:

答案 0 :(得分:0)

我建议查看现有的库,也就是说,如果你想知道其他开发人员认为正确的实现方式是什么。

至于设置一个环境变量来捕获令牌/代码,我认为它是原创的。我只是想(这是我的看法)将功能组合在一起并尽可能消除魔法更容易,也更合乎逻辑。

所以我不会使用环境变量,因为在一个月左右的时间里,我不会轻易记住我设置该变量的位置。因为您可以在应用程序的任何位置访问这些环境变量。

同样的论点也适用于我提供的解决方案,即使用魔法$ _GET ["代码"]来检索您的代码。

TLDR; 如果您不必重新发明轮子,Oauth2客户端可用,请使用它们。 (大多数甚至都有记录,并附带自己的测试\ o /所以你不必写那些)