Php 通过Laravel在Google API中保持授权

Php 通过Laravel在Google API中保持授权,php,laravel,oauth-2.0,google-calendar-api,Php,Laravel,Oauth 2.0,Google Calendar Api,我试图用OAuth2连接到google日历api。 它工作得很好,但每次会议结束时,我都要一次又一次地授权 我尝试存储刷新令牌和公钥,但没有成功。 最大的问题是我不知道如何检查实际钥匙是否正确 我的代码: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Carbon\Carbon; use App\Termin; use Google_Client; use Google_Service_Ca

我试图用OAuth2连接到google日历api。 它工作得很好,但每次会议结束时,我都要一次又一次地授权

我尝试存储刷新令牌和公钥,但没有成功。 最大的问题是我不知道如何检查实际钥匙是否正确

我的代码:

<?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');
       }
   }

}

您是否已成功获得
访问\u令牌
?是。我可以通过我的web应用程序成功地将事件存储到google日历中,但是当我在没有会话的情况下尝试时,我不能。好的,让我看看。。。可以肯定的是,您指的是right?这是正确的API。我看到您将获取的
access\u令牌存储为会话变量,这是不正确的。您应该将其存储在数据库中,并将其链接到您的站点。
Route::resource('/gcalendar', 'GCalendarController');
  Route::get('/oauth', ['as' => 'oauthCallback', 'uses' => 'gCalendarController@oauth']);
  Route::get('/homeOuath', 'gCalendarController@index')->name('homeOuath');