Как использовать гибридный плагин с CakePHP 3.x?

Я использую CakePHP 3.x для создания страницы, чтобы сделать социальный знак. Я обнаружил, что плагин HybridAuth может это сделать. Но я не могу понять о конфигурации и потоке. Кто привык к этому плагину?

Пожалуйста, помогите мне.

Related of "Как использовать гибридный плагин с CakePHP 3.x?"

Прежде всего, я должен поблагодарить моего друга за то, что он помог мне решить эту тайну в cakephp 3.

Я предоставляю все варианты использования плагина в cakephp 3, может ли это дать решение и изучить дополнительные улучшения в этом плагине.

Шаг 1: Запуск в композиторе

php composer.phar require hybridauth/hybridauth:~2.5.0 

Это должно установить плагин по следующему пути,

 /your-app-folder/vendor/hybridauth/.. 

Шаг 2. Инициализация плагина.

A. Измените файл config.php в следующей папке,

 /your-app-folder/vendor/hybridauth/hybridauth/hybridauth/config.php 

к требуемому методу, например добавить идентификатор приложения и секретный идентификатор и т. д.

 $config = array( "base_url" => "http://localhost/your-app-folder/users/social_redirect/",//You have to change the above according to yours "providers" => array( // openid providers "OpenID" => array( "enabled" => true ), "Yahoo" => array( "enabled" => true, "keys" => array("key" => "", "secret" => ""), ), "AOL" => array( "enabled" => true ), "Google" => array( "enabled" => true, "keys" => array("id" => "", "secret" => ""), ), "Facebook" => array( "enabled" => true, "keys" => array("id" => "", "secret" => ""), "scope" => "email, user_about_me, user_birthday, user_hometown", "trustForwarded" => false ), "Twitter" => array( "enabled" => true, "keys" => array("key" => "", "secret" => "") ), // windows live "Live" => array( "enabled" => true, "keys" => array("id" => "", "secret" => "") ), "LinkedIn" => array( "enabled" => true, "keys" => array("key" => "", "secret" => "") ), "Foursquare" => array( "enabled" => true, "keys" => array("id" => "", "secret" => "") ), ), // If you want to enable logging, set 'debug_mode' to true. // You can also set it to // - "error" To log only error messages. Useful in production // - "info" To log info and error messages (ignore debug messages) "debug_mode" => false, // Path to file writable by the web server. Required if 'debug_mode' is not false "debug_file" => "", ); 

Шаг 3: Теперь в вашем контроллере пользователей (я использовал пользовательский контроллер для http: // localhost / your-app-folder / users / social – для моих нужд)

Теперь ваш контроллер должен выглядеть так,

 <?php namespace App\Controller; use App\Controller\AppController; class UsersController extends AppController { public function beforeFilter(\Cake\Event\Event $event) { parent::beforeFilter($event); $this->Auth->allow(['register','social', 'social_redirect']); } public function index() { return $this->redirect(['controller' => 'Users', 'action' => 'add']); } public function social($provider) { /* Include the Config File */ require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'config.php'); require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'Hybrid' . DS . 'Auth.php'); /* Initiate Hybrid_Auth Function*/ $hybridauth = new \Hybrid_Auth($config); $authProvider = $hybridauth->authenticate($provider); $user_profile = $authProvider->getUserProfile(); /*Modify here as per you needs. This is for demo */ if ($user_profile && isset($user_profile->identifier)) { echo "<b>Name</b> :" . $user_profile->displayName . "<br>"; echo "<b>Profile URL</b> :" . $user_profile->profileURL . "<br>"; echo "<b>Image</b> :" . $user_profile->photoURL . "<br> "; echo "<img src='" . $user_profile->photoURL . "'/><br>"; echo "<b>Email</b> :" . $user_profile->email . "<br>"; echo "<br> <a href='logout.php'>Logout</a>"; } exit; /*Example Demo For FB authorize Action*/ #Facebook authorize if ($this->request->params['pass'][0] == 'Facebook') { if ($user_profile && isset($user_profile->identifier)) { $this->authorize_facebook($user_profile); } } } public function social_redirect() { $this->layout = false; $this->autoRender = false; require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'config.php'); require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'Hybrid' . DS . 'Auth.php'); require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'Hybrid' . DS . 'Endpoint.php'); $hybridauth = new \Hybrid_Auth($config); \Hybrid_Endpoint::process(); } public function authorize_facebook($user_profile) { $provider = "Facebook"; $provider_uid = $user_profile->identifier; $userExist = $this->Users->find('all')->where(['Users.provider' => $provider, 'Users.provider_uid' => $user_profile->identifier])->first(); if ((isset($userExist)) && ($userExist)) { $session = $this->request->session(); $session->delete('auth_sess_var'); $session->destroy(); $this->Auth->setUser($userExist->toArray()); $session->write('auth_sess_var', $userExist); return $this->redirect($this->Auth->redirectUrl()); } else { /* Create new user entity */ $user = $this->Users->newEntity(); $tmp_hash = md5(rand(0, 1000)); $tmp_id = time(); /* Save individual data */ $user->tmp_id = $tmp_id; $user->firstname = (!empty($user_profile->firstName)) ? $user_profile->firstName : ""; $user->lastname = (!empty($user_profile->lastName)) ? $user_profile->lastName : ""; $user->username = (!empty($user_profile->lastName) && !empty($user_profile->lastName)) ? strtolower($user_profile->firstName) . "." . strtolower($user_profile->lastName) : ""; $user->avatar = (!empty($user_profile->photoURL)) ? $user_profile->photoURL : ""; $user->role = "public"; $user->provider = $provider; $user->provider_uid = $user_profile->identifier; $user->gender = !empty($user_profile->gender) ? (($user_profile->gender == 'male') ? 'm' : 'f' ) : ""; $user->provider_email = !empty($user_profile->email) ? $user_profile->email : ""; $user->password = $user_profile->identifier; $user->confirm_password = $user_profile->identifier; $user->tmp_hash = $tmp_hash; $user->isverified = (!empty($user_profile->emailVerified)) ? 1 : 0; $user = $this->Users->patchEntity($user, $this->request->data); $this->Users->save($user); $userDetails = $this->Users->find('all')->where(['Users.provider' => $provider, 'Users.provider_uid' => $user_profile->identifier])->first(); /* Destroy previous session before setting new Session */ $session = $this->request->session(); $session->delete('auth_sess_var'); $session->destroy(); /* Set user */ $this->Auth->setUser($userDetails->toArray()); $session->write('auth_sess_var', $userDetails); return $this->redirect($this->Auth->redirectUrl()); } } } 

Примечание. Измените Вещи в соответствии с вашими потребностями и спроектируйте таблицу согласно вашему требованию.

Шаг 4

Вызов гибридного auth:

 For Ex: <a href="/users/social/Facebook">Facebook<a> 

для входа в facebook;

Eureka. Он будет работать как шарм.

Для получения дополнительной информации здесь.

Изменить 2:

Пример Действие входа (по умолчанию Auth Control)

В App Controller,

 public function initialize() { parent::initialize(); $this->loadComponent('Flash'); /* Authentication */ $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => [ 'username' => 'email', 'password' => 'password' ] ] ], 'loginRedirect' => [ 'controller' => 'controller', 'action' => 'action' ], 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'login' ], 'loginAction' => [ 'controller' => 'Users', 'action' => 'login' ] ]); } 

Вы читали эту страницу еще? http://miftyisbored.com/complete-social-login-application-tutorial-cakephp-2-3-twitter-facebook-google/

Это поможет вам установить гибрид в CakePHP 3.0, но вам нужно изменить некоторые моменты в методе CakePHP3, например:

 // config/hybridauth.php return [ 'HybridAuth' => [ 'base_url' => 'URL here', 'providers' => [ 'Twitter' => [...] ] ]; 

а также

 // src/Controller/Component/HybridauthComponent.php // App::import('Vendor', 'hybridauth/Hybrid/Auth'); // $this->hybridauth = new Hybrid_Auth( $config ); $this->hybridauth = new \Hybrid_Auth( $config ); 

Кроме того, проверьте этот документ.

https://github.com/ADmad/CakePHP-HybridAuth/blob/master/README.md

В нем говорится, что вам нужно инициализировать компонент Auth, но это не сработало, поэтому я применил следующие параметры:

 // src/Controller/AppController.php public function initialize() { $this->loadComponent('Auth', [ 'authenticate' => [ 'ADmad/HybridAuth.HybridAuth' ], // redirect here if the user not authorized 'loginAction' => [ 'controller' => 'User', 'action' => 'login', ], ]); } 

Я получил ошибку с этим кодом, и я отремонтировал его с помощью: ошибки: Конфигурация Hybriauth не существует на данном пути.

Решение: в контроллере пользователей, где вы вызываете (требуете) config.php

 require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'config.php'); 

вам нужно сохранить то, что вам нужно, в переменной $ config:

 $config = require_once(ROOT . DS . 'vendor' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'hybridauth' . DS . 'config.php');