1

ユーザーのGoogleアカウント情報を使用してログインするワードプレスブログ用のログインシステムを作成しようとしています。これにより、コメントを残したり、投稿に投票したりできます。これを行う方法に関するphpコードがあり、静的htmlページとして使用すると機能しますが、エラーなしで適切に機能するためにWordpressで追加する場所がわからないため、ヘッダーに追加しようとしました.php ですが、それは正しくないようで、いくつかのエラーが発生することがあります。

    <?php
//Googles API
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_Oauth2Service.php';

//start session
session_start();

$client = new Google_Client();
$client->setApplicationName("Google UserInfo PHP Starter Application");

// Visit https://code.google.com/apis/console?api=plus to generate your
// oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri.
// $client->setClientId('insert_your_oauth2_client_id');
// $client->setClientSecret('insert_your_oauth2_client_secret');
// $client->setRedirectUri('insert_your_redirect_uri');
// $client->setDeveloperKey('insert_your_developer_key');

$client->setClientId('473410134519.apps.googleusercontent.com');
    $client->setClientSecret('******');
    $client->setRedirectUri('http://www.pharzan.com/bitlog');
    $client->setDeveloperKey('AIzaSyBLKLt******');
$oauth2 = new Google_Oauth2Service($client);

if (isset($_GET['code'])) {
  $client->authenticate($_GET['code']);
  $_SESSION['token'] = $client->getAccessToken();
  $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
  header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
  return;
}

if (isset($_SESSION['token'])) {
 $client->setAccessToken($_SESSION['token']);
}

if (isset($_REQUEST['logout'])) {
  unset($_SESSION['token']);
  $client->revokeToken();
}

if ($client->getAccessToken()) {
  $user = $oauth2->userinfo->get();

  // These fields are currently filtered through the PHP sanitize filters.
  // See http://www.php.net/manual/en/filter.filters.sanitize.php
  $email = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
  $img = filter_var($user['picture'], FILTER_VALIDATE_URL);
  $personMarkup = "$email<div><img src='$img?sz=50'></div>";
  $name=filter_var($user['given_name'], FILTER_SANITIZE_STRING);
        //Get user details if user is logged in

      $user_id              = $user['id'];
      $user_name            = filter_var($user['name'], FILTER_SANITIZE_SPECIAL_CHARS);
      $email                = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
      $profile_url          = filter_var($user['link'], FILTER_VALIDATE_URL);
      $profile_image_url    = filter_var($user['picture'], FILTER_VALIDATE_URL);
      $personMarkup         = "$email<div><img src='$profile_image_url?sz=50'></div>";

  // The access token may have been updated lazily.
  $_SESSION['token'] = $client->getAccessToken();
} else {
  $authUrl = $client->createAuthUrl();
}
?>

次に、そのようなコードを使用してユーザー マークアップ イメージを表示し、ユーザーがログインしているかどうかを確認する必要があります。

<?php if(isset($personMarkup)): ?>

    <img class='markup' src='<?php   echo $profile_image_url;?>'> </img>

<?php endif ?>

<?php //USER NOT LOGGED IN
  if(isset($authUrl)) {

   print "<a class='login' href='$authUrl' title="Login with google" </a> ";
   print "<script>console.log('.$authUrl.');</script>";
  } 
  else {
  print '<a class="log_out" href="?logout"> Logout?</a>';
  print "<script>console.log('.$authUrl.');</script>";
 }
?>

私の問題は、このコードをワードプレスに含める場所がわからないことです。ヘッダーに配置すると、最初の部分が毎回ロードされ、その部分でエラーが発生し、 start_session()また、別の部分で情報を処理する必要がある場合ページ、ヘッダーに 1 回、フッターに 1 回と言って、コードを含める方法がわかりません。

4

1 に答える 1

1

WordPress 認証は、これらすべてを処理する .php ファイルよりもはるかに複雑です。ファイルは一つもありません。また、WordPress の更新が不可能または非常に困難になるため、コアファイルを変更することはお勧めできません。

Google OAuth ログインを追加する独自のプラグインを実装することを決定した場合、良い出発点はcodexです。

私はこれに反対することをお勧めします。あなたが探している機能は、他の人によって無料のオープンソース プラグインで既に実装されています。出発点として、それらを参照することもできます。

于 2013-08-24T15:36:41.170 に答える