Оставайтесь авторизованными в 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');