Php 通过Laravel在Google API中保持授权
我试图用OAuth2连接到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
<?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');