Оставайтесь авторизованными в Google API с Laravel

Я пытался подключиться к API календаря Google с OAuth2. Это работает очень хорошо, но каждый раз, когда сессия закрыта, я должен авторизоваться снова и снова.

Я пытался сохранить токен обновления и открытый ключ, но он не работал. Самая большая проблема состояла в том, что я не знал, как я могу проверить, является ли фактический ключ правильным.

Мой код:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Termin;
use Google_Client;
use Google_Service_Calendar;
use Google_Service_Calendar_Event;
use Google_Service_Calendar_EventDateTime;


class gCalendarController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {

        $client = new Google_Client();
         $client->setAuthConfig('client_secret.json');
         $client->setScopes('https://www.googleapis.com/auth/calendar');
         $guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
         $client->setHttpClient($guzzleClient);
         $client->setAccessType('offline');
         $this->client = $client;

    }


    public function index()
    {
        session_start();
        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
            $this->client->setAccessToken($_SESSION['access_token']);
            $service = new Google_Service_Calendar($this->client);
            $calendarId = 'primary';
            $results = $service->events->listEvents($calendarId);

           return view('admin.googlecalender')->with('results', $results->getItems());
        } else {
            return redirect()->route('oauthCallback');
        }
    }

    public function oauth()
   {
       session_start();
       $rurl = action('gCalendarController@oauth');

       $this->client->setRedirectUri($rurl);
       if (!isset($_GET['code'])) {
           $auth_url = $this->client->createAuthUrl();
           $filtered_url = filter_var($auth_url, FILTER_SANITIZE_URL);

           return redirect($filtered_url);
       } else {
           $this->client->authenticate($_GET['code']);
           $_SESSION['access_token'] = $this->client->getAccessToken();
           return redirect()->route('admin.dashboard');
       }
   }

   public function store(Request $request)
    {
        session_start();

        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
            $this->client->setAccessToken($_SESSION['access_token']);
            $service = new Google_Service_Calendar($this->client);
            $calendarId = 'primary';
            $event = new Google_Service_Calendar_Event([
                'summary' => $request['title'],
                'description' => $request['description'],
                'start' => ['dateTime' => Carbon::parse($request['starttime'], 'Europe/Berlin')->toAtomString()],
                'end' => ['dateTime' => Carbon::parse($request['endtime'], 'Europe/Berlin')->toAtomString()],
                'reminders' => ['useDefault' => true],
            ]);
            $results = $service->events->insert($calendarId, $event);
            if (!$results) {
                return response()->json(['status' => 'error', 'message' => 'Something went wrong']);
            }
            return response()->json(['status' => 'success', 'message' => 'Event Created']);
        } else {
            return redirect()->route('oauthCallback');
        }
    }



    public function show($eventId)
   {
       session_start();
       if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
           $this->client->setAccessToken($_SESSION['access_token']);
           $service = new Google_Service_Calendar($this->client);
           $event = $service->events->get('primary', $eventId);
           if (!$event) {
               return response()->json(['status' => 'error', 'message' => 'Something went wrong']);
           }
           return response()->json(['status' => 'success', 'data' => $event]);
       } else {
           return redirect()->route('oauthCallback');
       }
   }

}

Мои маршруты:

Route::resource('/gcalendar', 'GCalendarController');
  Route::get('/oauth', ['as' => 'oauthCallback', 'uses' => 'gCalendarController@oauth']);
  Route::get('/homeOuath', 'gCalendarController@index')->name('homeOuath');

0 ответов

Другие вопросы по тегам