加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Google登录服务器端应用程序auth不工作

发布时间:2020-12-13 16:37:24 所属栏目:PHP教程 来源:网络整理
导读:我试图添加Google auth for wordpress网站. 我想要的:如果用户没有在网站上注册,在谷歌身份验证后 – 我将他重定向到他输入用户名的页面;如果用户已经注册 – 它将被登录. 这里我的js代码: function doGooglePlusLogin(authResult) { if (authResult['code
我试图添加Google auth for wordpress网站.
我想要的:如果用户没有在网站上注册,在谷歌身份验证后 – 我将他重定向到他输入用户名的页面;如果用户已经注册 – 它将被登录.
这里我的js代码:
function doGooglePlusLogin(authResult) {
    if (authResult['code']) {
        jQuery('#signinButton').attr('style','display: none');
        jQuery.ajax({
            url: '<?php echo site_url(); ?>/wp-admin/admin-ajax.php',type: 'get',dataType: 'json',data: {
                action: 'login_gplus',code: authResult['code']
            },success: function(result) {
            },});
    } else if (authResult['error']) {
    }
}

这里我的php代码:

function login_gplus() {
$response = array();

if (isset($_GET['code']) && !empty($_GET['code'])) {
    @session_start();
    $client = new Google_Client();
    $client->setApplicationName('Test');
    $client->setAccessType('offline');
    $client->setClientId(get_option(SOCIAL_GPLUS_CLIENT_ID));
    $client->setClientSecret(get_option(SOCIAL_GPLUS_CLIENT_SECRET));
    $client->setDeveloperKey(get_option(SOCIAL_GPLUS_API_KEY));
    $client->setRedirectUri(get_option(SOCIAL_GPLUS_REDIRECT_URIS));
    $client->setApprovalPrompt('auto');

    $code = $_GET['code'];
    $client->authenticate($code);

    $token = json_decode($client->getAccessToken());
    $reqUrl = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' . $token->access_token;
    $req = new Google_HttpRequest($reqUrl);

    $tokenInfo = json_decode(
            $client->getIo()
                    ->authenticatedRequest($req)
                    ->getResponseBody());

    if ($tokenInfo->error) {
        $response['test'] = $tokenInfo->error;
        send_json_response($response);
        die();
    }
    if ($tokenInfo->audience != get_option(SOCIAL_GPLUS_CLIENT_ID)) {
        $response['test'] = "Token's client ID does not match app's.";
        send_json_response($response);
        die();
    }
    $response['test'] = 'Succesfully connected with token: ' . print_r($token,true);
}
send_json_response($response);
die();
}

用户在Google中成功授权,但在php中我得到:

致命的错误:未知的异常“Google_AuthException”与消息’提取OAuth2访问令牌错误,消息:’redirect_uri_mismatch”in / var / www / html / v4 / wp-content / plugins / social / google-plus / google-api / auth /Google_OAuth2.php:113堆栈跟踪:#0 /var/www/html/v4/wp-content/plugins/social/google-plus/google-api/Google_Client.php(131):Google_OAuth2-> authenticate(Array,‘4 / ScmpTqEIWt0SJ …’)#1 /var/www/html/v4/wp-content/plugins/social/google-plus/functions.php(35):Google_Client-> authenticate(‘4 / ScmpTqEIWt0SJ. #2 [internal function]:login_gplus(”)#3 /var/www/html/v4/wp-includes/plugin.php(406):call_user_func_array(‘login_gplus’,Array)#4 / var /www/html/v4/wp-admin/admin-ajax.php(74):do_action(‘wp_ajax_nopriv _…’)#5 {main}抛入/ var / www / html / v4 / wp-content / plugins /social/google-plus/google-api/auth/Google_OAuth2.php第113行

在应用程序设置中重定向指定为http://example.com/wp-admin/admin-ajax.php的URI.
我做错了什么

编辑:

Google登录按钮定义:

<span id="signinButton">
  <span class="g-signin"
   data-callback="doGooglePlusLogin"
   data-clientid="<?php echo $this->gplus_client_id; ?>"
   data-cookiepolicy="single_host_origin" data-accesstype="offline"
   data-requestvisibleactions="http://schemas.google.com/AddActivity"
   data-scope="https://www.googleapis.com/auth/plus.login">
  </span>
</span>

SOCIAL_GPLUS_REDIRECT_URIS是example.com/wp-admin/admin-ajax.php?action=login_gplus

你的代码基本上是对的,但有一点点奇怪,我看不到文件记录非常好!您必须将redirectURI设置为postmessage而不是您使用的URL.
$client->setRedirectUri('postmessage');

这是因为它与在按钮的Javascript交换期间的令牌URI设置相匹配.看看示例代码:https://github.com/googleplus/gplus-quickstart-php/blob/master/signin.php,看看它在行动.我将确保我们在文档中添加了一个注释.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读