Frage

Hallo, ich würde hier gerne etwas lernen. Grundsätzlich möchte ich, dass der Zugriff auf mein System über ein Google-Konto erfolgt. Irgendwie schaffe ich es, Folgendes zu tun

  • Client-ID abrufen, URIS umleiten, geheime Schlüssel
  • Authentifizierung über ein Google-Konto
  • bekomme Token

Aber ich hatte das Gefühl, dass ich teilweise alles falsch gemacht habe, das ist das Oauth2callback

class Oauth2callback extends CI_Controller {


    function __construct(){
        parent::__construct();

        $this->load->helper('url');
        $this->load->library('session');
        require_once APPPATH.'libraries/Google/Client.php';
        session_start();


    }

    public function index()
    {


        $client_id = $this->config->item('client_id');
        $client_secret = $this->config->item('client_secret');
        $redirect_uri = $this->config->item('redirect_uri');

        $client = new Google_Client();
        $client->setClientId($client_id);
        $client->setClientSecret($client_secret);
        $client->setRedirectUri($redirect_uri);
        $client->addScope("https://www.googleapis.com/auth/userinfo.email");
        $client->addScope("https://www.googleapis.com/auth/userinfo.profile");

        if (isset($_GET['code'])) {
            $client->authenticate($_GET['code']);
            $_SESSION['access_token'] = $client->getAccessToken();
            $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

            header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
        }

        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
            $client->setAccessToken($_SESSION['access_token']);
        } else {
            $authUrl = $client->createAuthUrl();
        }

        if ($client->getAccessToken()) {
            $_SESSION['access_token'] = $client->getAccessToken();


        }


        if(isset($authUrl)) {
            header('location:'. base_url());
        }else{
            header('location:'. base_url().'dashboard');
        }
    }

aber das ist mein Index-Controller Login Es hat nur einen Knopf sign in with Google

class Login extends CI_Controller {


    function __construct(){
        parent::__construct();

        $this->load->helper('url');
        $this->load->library('session');
        require_once APPPATH.'libraries/Google/Client.php';
        session_start();
    }

    public function index()
    {
        //$this->checkSession();
        $client_id = $this->config->item('client_id');
        $client_secret = $this->config->item('client_secret');
        $redirect_uri = $this->config->item('redirect_uri');

        $client = new Google_Client();
        $client->setClientId($client_id);
        $client->setClientSecret($client_secret);
        $client->setRedirectUri($redirect_uri);
        $client->addScope("https://www.googleapis.com/auth/userinfo.email");
        $client->addScope("https://www.googleapis.com/auth/userinfo.profile");

            $authUrl = $this->data['authUrl'] = $client->createAuthUrl();
            $this->load->view('login/index.php',$this->data);
            $this->load->view('template/pre_footer');
            $this->load->view('template/footer');


    }
}


Was wäre der richtige Prozess dafür mit MVC PHP? Ich muss das ff machen.:
A.klicktaste sign in to google
B.Holen Sie sich das Token und speichern Sie es in der Sitzung
C.Habe den Token für mein gesamtes System verwendet (in jedem Controller)

Was ich gerade habe, ist A und B, aber bei C weiß ich überhaupt nicht, was ich tun soll.

Könnte mir jemand dabei helfen?Wir freuen uns über jeden Vorschlag und Kommentar.Dank im Voraus.

War es hilfreich?

Lösung

Der Code, den Sie haben, könnte etwas verwirrend sein, da er gleichzeitig die Autorisierungs-URL, die Weiterleitung zu Google, den Rückruf zu Ihrer Website und das Speichern des Zugriffstokens verwaltet.

Wenn es darum geht, das Zugriffstoken zu verwenden, um einen authentifizierten Aufruf an die API durchzuführen, ist dies viel einfacher.Wenn in Ihrer Sitzung ein gültiges Zugriffstoken gespeichert ist, können Sie es wirklich überall verwenden, um die Google-Anwendung zu initialisieren, und zwar auf folgende Weise:

// client
$client = new Google_Client();
$client->setApplicationName('Google Application');
$client->setClientId($clientId);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectUri);

// token
$client->setAccessToken($token);

Wenn Sie nun möchten, dass dies auf mehreren Controllern verfügbar ist, wäre es in CodeIgniter am besten, eine neue Bibliothek zu erstellen, die den obigen Code umschließt.

Der Vorteil der Verwendung einer Bibliothek besteht darin, dass sie automatisch in der CodeIgniter-Konfiguration geladen werden kann und überall in Ihrem Code leicht zugänglich ist.

Beispielbibliothek:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    private $client;

    public function __construct()
    {
        ... 

        // client
        $client = new Google_Client();
        $this->client->setApplicationName('Google Application');
        $this->client->setClientId($clientId);
        $this->client->setClientSecret($clientSecret);
        $this->client->setRedirectUri($redirectUri);

        // token
        $this->client->setAccessToken($token);
    }
}

?>

Dann müssen Sie nur noch Folgendes tun, um es in Ihrem Controller zu verwenden:

 $this->load->library('someclass');

Sie können auch Verknüpfungen zu bestimmten APIs erstellen.Wenn Sie beispielsweise einen schnellen Zugriff auf die Google Analytics-API wünschen, können Sie Folgendes tun:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    private $client;

    public function __construct()
    {
        ... 

        // client
        $client = new Google_Client();
        $this->client->setApplicationName('Google Application');
        $this->client->setClientId($clientId);
        $this->client->setClientSecret($clientSecret);
        $this->client->setRedirectUri($redirectUri);

        // token
        $this->client->setAccessToken($token);
    }

    public function analytics()
    {
        return new Google_Service_Analytics($this->client);
    }
}

?>

Und dann verwenden Sie es so in Ihrem Controller:

 $this->load->library('someclass');
 $this->someclass->analytics();

Erfahren Sie mehr über CodeIgniter-Bibliotheken:

http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top