2017-04-08 10 views
0

私はそれをコードしており、それは1人のために働いている問題です。だから、私がログインしていれば、そのトークンが期限切れにならない限り、どんなユーザのログイン画面も再び表示されません。PHP GoogleドライブAPIの統合ユーザのログインとリスティングファイル

のindex.php

<?php 

session_start(); 
require_once __DIR__ . '/vendor/autoload.php'; 

$client = new Google_Client(); 
$client->setAuthConfig('client_id.json'); 
$client->addScope(Google_Service_Drive::DRIVE); 

if (file_exists("credentials.json")) { 
    $access_token = (file_get_contents("credentials.json")); 
    $client->setAccessToken($access_token); 
    //Refresh the token if it's expired. 
    if ($client->isAccessTokenExpired()) { 
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
    file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
    } 
    $drive_service = new Google_Service_Drive($client); 
    $files_list = $drive_service->files->listFiles(array())->getFiles(); 
    if (count($files_list) == 0) { 
    print "No files found.\n"; 
} else { 
    foreach ($files_list as $file) { 
     $res['name'] = $file->getName(); 
     $res['id'] = $file->getId(); 
     $files[] = $res; 
    } 
    print_r($files); 
} 
} else { 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/callback.php'; 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

だから、インデックスファイルをチェックし、リストには、コールバックファイルを介して他の賢明なログインユーザをファイルが存在する場合credentials.jsonファイルがトークンまたはないアクセスを持っている場合。

callback.php

<?php 
session_start(); 
require_once __DIR__ . '/vendor/autoload.php'; 
$client = new Google_Client(); 
$client->setAuthConfigFile('client_id.json'); 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/callback.php'); 
$client->addScope(Google_Service_Drive::DRIVE); //::DRIVE_METADATA_READONLY 

if (! isset($_GET['code'])) { 
    $auth_url = $client->createAuthUrl(); 
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
} else { 
    $client->authenticate($_GET['code']); 
    $access_token = $client->getAccessToken(); 
    file_put_contents("credentials.json", json_encode($access_token)); 

    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/index.php'; 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

これは、私はそれだけで店舗1つのトークンので推測し、その値を示して間違ったアプローチです。ログインしていないすべての人が自分のファイルリストを見るためにログインする必要がある方法がありますか?

ありがとうございました。

答えて

0

ログアウトするボタンを追加したり、ユーザーを自動的にサインアウトする機能を作成したりすることができます。このpostに記載されているように、gapi.auth2.getAuthInstance().signOut()を使用すると、サイトへの自動サインインを防ぐことができます。

彼のデモsiteを試すことができます。次のコードに示すように、彼らはページを離れるとき、デモでは、ユーザーがサインアウトされます。

window.onbeforeunload = function(e){ 
    gapi.auth2.getAuthInstance().signOut(); 
}; 

関連の記事で彼の答えでは、自動サインインの防止についての説明があります。あなたがサインアウトメソッドをトリガするためにウィンドウを閉じるかナビゲートするようなイベントがあります。

これが役に立ちます。

関連する問題