CakePHP 3:给定路径上不存在 Hybriauth 配置
CakePHP 3 : Hybriauth config does not exist on the given path
我正在处理 CakePHP 3 项目,我必须在其中添加社交登录。
为此,我正在按照
中的教程使用 HybridAuth
现在当我访问 http://website.com/users/social/Facebook
时出现错误
Hybriauth config does not exist on the given path.
我的 UsersController
是
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
/**
* Users Controller
*
* @property \App\Model\Table\UsersTable $Users
*/
class UsersController extends AppController
{
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->Auth->allow(['register','logout','social','social_redirect']);
}
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password'));
}
}
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 need. 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;
$firstName = (!empty($user_profile->firstName)) ? $user_profile->firstName : "";
$lastName = (!empty($user_profile->lastName)) ? $user_profile->lastName : "";
$user->name = $firstName . ' ' . $lastName;
// $user->username = (!empty($user_profile->firstName) && !empty($user_profile->lastName)) ? strlolower($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->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->verified = (!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());
}
}
public function logout()
{
return $this->redirect($this->Auth->logout());
}
}
我已经使用 composer
安装了 HybridAuth : version 2.5.1
,它的位置是
| / root
|- vendor
|- hybridauth
|- hybridauth
|- hybridauth
|- Hybrid (directory)
|- Auth.php
|- ...
|- config.php
|- index.php
config.php
的内容
<?php
/**
* HybridAuth
* http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth
* (c) 2009-2015, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html
*/
// ----------------------------------------------------------------------------------------
// HybridAuth Config file: http://hybridauth.sourceforge.net/userguide/Configuration.html
// ----------------------------------------------------------------------------------------
return
array(
"base_url" => "http://website.com/users/social-redirect/",
"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" => "id", "secret" => "key"),
"trustForwarded" => false
),
"Twitter" => array(
"enabled" => true,
"keys" => array("key" => "", "secret" => ""),
"includeEmail" => false
),
// 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" => "",
);
代码有什么问题?
这是消除错误的方法:
在您调用的用户控制器中(需要)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');
此致
我正在处理 CakePHP 3 项目,我必须在其中添加社交登录。
为此,我正在按照
HybridAuth
现在当我访问 http://website.com/users/social/Facebook
时出现错误
Hybriauth config does not exist on the given path.
我的 UsersController
是
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
/**
* Users Controller
*
* @property \App\Model\Table\UsersTable $Users
*/
class UsersController extends AppController
{
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->Auth->allow(['register','logout','social','social_redirect']);
}
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password'));
}
}
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 need. 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;
$firstName = (!empty($user_profile->firstName)) ? $user_profile->firstName : "";
$lastName = (!empty($user_profile->lastName)) ? $user_profile->lastName : "";
$user->name = $firstName . ' ' . $lastName;
// $user->username = (!empty($user_profile->firstName) && !empty($user_profile->lastName)) ? strlolower($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->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->verified = (!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());
}
}
public function logout()
{
return $this->redirect($this->Auth->logout());
}
}
我已经使用 composer
安装了 HybridAuth : version 2.5.1
,它的位置是
| / root
|- vendor
|- hybridauth
|- hybridauth
|- hybridauth
|- Hybrid (directory)
|- Auth.php
|- ...
|- config.php
|- index.php
config.php
<?php
/**
* HybridAuth
* http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth
* (c) 2009-2015, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html
*/
// ----------------------------------------------------------------------------------------
// HybridAuth Config file: http://hybridauth.sourceforge.net/userguide/Configuration.html
// ----------------------------------------------------------------------------------------
return
array(
"base_url" => "http://website.com/users/social-redirect/",
"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" => "id", "secret" => "key"),
"trustForwarded" => false
),
"Twitter" => array(
"enabled" => true,
"keys" => array("key" => "", "secret" => ""),
"includeEmail" => false
),
// 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" => "",
);
代码有什么问题?
这是消除错误的方法: 在您调用的用户控制器中(需要)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');
此致