将Google OAuth API与现有用户系统集成?

时间:2014-03-23 00:20:33

标签: php oauth youtube youtube-api google-api

我有一个简单的用户系统,其中包含基本信息:电子邮件和密码。而不是使用Google API作为“登录”功能:

Is there any way i can "Link" the user's Youtube Channel to their account?

Is there a way i can Link multiple channels to a user's account? If so, how would i keep track of which user to get data from?

我编写了一些PHP类来处理Google的OAuth流程,以及在数据库中存储访问令牌,到期时间和刷新令牌(您可能会想到“不要重新发明轮子”,但是我也喜欢通过写这些课来学习。)

由于我不断完成我的逻辑以及如何将所有内容都列出来,我只是不明白我如何将用户的帐户链接到我以前的帐户。 EG:当他们登录时,我如何获得用户的链接频道?

以下是我的Client.php中的一些代码

public function authinticate($authorizationCode)
{
    // Now we need to do a POST request to get an Access token and a refresh token
    $post = array("grant_type" => "authorization_code", "code" => $authorizationCode, "client_id" => $this->clientID, "client_secret" => $this->clientSecret, "redirect_uri" => $this->redirectUri);
    $postText = http_build_query($post);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, self::Google_OAuth_Token_Url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postText); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $result = curl_exec($ch);

    //Decode the returned values
    $responseArray = json_decode($result, true);

    // Set out values
    $this->accessToken = $responseArray['access_token'];
    $this->refreshToken = $responseArray['refresh_token'];
    $this->expiresIn = $responseArray['expires_in'];
}

还有一些来自我的TokenStorage类:

// Store the token Data response from google, (IF reresh token is passed with a value, this means that the user JUST authorized our application, so we need to store that value)
public function storeTokenData($channelID, $accessToken, $refreshToken, $expirationTime)
{
    $firstRequest = "INSERT INTO tokens (channelID, accessToken, refreshToken, expirationTime) VALUES (?, ?, ?, DATE_ADD(NOW(), INTERVAL $expirationTime SECOND)";
    $linkedRequest = "INSERT INTO tokens (channelID, accessToken, expirationTime) VALUES (?, ?, DATE_ADD(NOW(), INTERVAL $expirationTime SECOND)";

    if($refreshToken == null)
    {
        if ($storeTokenData = global $mysqli->prepare($firstRequest)) 
        {    
            $storeTokenData->bind_param('sss', $channelID, $accessToken, $refreshToken); 
            if($storeTokenData->execute()) {
                // Data stored success...
                return true;
            } else {
                // Something happened...
                return false;
            }
        }
    }
    else
    {
        if ($storeTokenData = global $mysqli->prepare($linkedRequest)) 
        {    
            $storeTokenData->bind_param('ss', $channelID, $accessToken); 
            if($storeTokenData->execute()) {
                // Data stored success...
                return true;
            } else {
                // Something happened...
                return false;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

<强>问题

您希望集成现有的登录解决方案并链接用户Youtube帐户。

<强>建议

为什么不在Youtube上使用PHP API? (API)将登录帐户和Youtube帐户链接收集到一个新表中,并要求用户通过登录您的帐户和新登录信息来链接他们的帐户(当他们使用Youtube帐户登录时)?之后,帐户可以保持同步,因为您将使用新的信息列扩展登录表或链接到相关表(加密的Youtube链接)。至少这是个大主意。我相信这项工作会有一些挑战,但我已经在其他网站上看到了它。

实质上为Youtubers构建第二个登录流程,通过API连接。然后让他们登录到他们的普通帐户并使用现有表中的列链接登录或使用带有外键的新链接表来允许多个Youtube页面/帐户。那是我最初的做法。上面提供的链接是与Youtube PHP API的连接。我自己也不需要这样做,但如果你需要更精确的帮助,请告诉我。