From ae124c9c1ae237aa815b1a892808fc35def26d73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Tue, 21 Sep 2021 16:04:10 +0200
Subject: [PATCH] Add "logout" button

---
 public/index.php | 44 ++++++++++++++++++++++++++++++++++++++++++--
 template.php     |  3 +++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/public/index.php b/public/index.php
index 2dd515c..923f16c 100644
--- a/public/index.php
+++ b/public/index.php
@@ -4,17 +4,57 @@ session_start();
 require '../vendor/autoload.php';
 require '../config.php';
 
+if (isset($_GET['logout'])) {
+    $_SESSION['accessToken'] = '';
+    $_SESSION['refreshToken'] = '';
+}
+
 $accessToken = '';
 if (isset($_SESSION['accessToken'])) {
     $accessToken = $_SESSION['accessToken'];
 }
+$refreshToken = '';
+if (isset($_SESSION['refreshToken'])) {
+    $refreshToken = $_SESSION['refreshToken'];
+}
+
 if (!$accessToken) {
     header('Location: auth.php');
     die();
 }
 
-$api = new SpotifyWebAPI\SpotifyWebAPI();
-$api->setAccessToken($accessToken);
+$session = new SpotifyWebAPI\Session(
+    $CLIENT_ID,
+    $CLIENT_SECRET
+);
+
+// Use previously requested tokens fetched from session
+if ($accessToken) {
+    $session->setAccessToken($accessToken);
+    $session->setRefreshToken($refreshToken);
+} else {
+    // Or request a new access token
+    $session->refreshAccessToken($refreshToken);
+}
+
+$scopes = $session->getScope();
+
+$options = [
+  'scope' => [
+      'playlist-read-private',
+      'playlist-modify-private',
+      'user-read-private',
+  ],
+'auto_refresh' => true,
+];
+
+$api = new SpotifyWebAPI\SpotifyWebAPI($options, $session);
+
+// Save new tokens, they might have been updated
+$_SESSION['accessToken'] = $session->getAccessToken();
+$_SESSION['refreshToken'] = $session->getRefreshToken();
+
+// ################################################################
 
 $user = $api->me();
 
diff --git a/template.php b/template.php
index dbc0190..cd5e753 100644
--- a/template.php
+++ b/template.php
@@ -21,6 +21,9 @@
           <h5 class="card-title"><?php echo $templateData['user']->display_name; ?></h5>
           <a href="<?php echo $templateData['user']->external_urls->spotify; ?>" class="btn btn-primary">View profile</a>
         </div>
+        <div class="card-footer">
+          <a href="?logout" class="card-link">disconnect</a>
+        </div>
       </div>
 
     </div>
-- 
GitLab