Social auth için ADmad/CakePHP-HybridAuth Eklentisi kullanıyorum. Bunun için https://github.com/ADmad/CakePHP-HybridAuth numaralı belgeyi takip ettim. Doc üzerinde yapılanla aynı şeyi yaptım ama bir özel durumla karşılaşıyorum: -Cakephp ADmad CakePHP-HybridAuth Eklentisi Exception attı
"HybridAuth.newUser" olayı için yeni kullanıcı kaydını kaydedip kullanıcı bir varlık döndüren bir dinleyici eklemelisiniz.
Lütfen bu sorunu çözmemde bana yardımcı olun.
Örnek:
UserModel: Uygulama denetleyicisi olarak
<?php
namespace Accounts\Model\Table;
use Accounts\Model\Entity\User;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validation;
use Cake\Validation\Validator;
use Cake\Event\Event;
use Cake\Event\EventManager;
/**
* Users Model
*
* @property \Cake\ORM\Association\BelongsTo $Roles
*/
class UsersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->table('users');
$this->displayField('first_name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Roles', [
'foreignKey' => 'role_id',
'joinType' => 'LEFT',
'className' => 'Accounts.Roles',
]);
$this->hasOne('Profiles', [
'foreignKey' => 'user_id',
'className' => 'Accounts.Profiles',
'dependent' => true
]);
$this->hasMany('ADmad/HybridAuth.SocialProfiles');
EventManager::instance()->on('HybridAuth.newUser', [$this, 'createUser']);
}
public function createUser(Event $event) {
// Entity representing record in social_profiles table
$profile = $event->data()['profile'];
$user = $this->newEntity(['email' => $profile->email]);
$user = $this->save($user);
if (!$user) {
throw new \RuntimeException('Unable to save new user');
}
return $user;
}
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');
return $validator;
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['email']));
$rules->add($rules->isUnique(['username']));
$rules->add($rules->existsIn(['role_id'], 'Roles'));
return $rules;
}
public function beforeSave($event, $entity, $options){
if($entity->first_name)
$entity->slug = $this->createSlug($entity->first_name);
}
}
: UsersController olarak
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'username',
'password' => 'password'
]
],
'ADmad/HybridAuth.HybridAuth'
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
'plugin' => 'Accounts'
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'login',
'plugin' => 'Accounts'
],
]);
:
public function login()
{
if($this->Auth->user()){
$this->redirect(array('action'=>'index', 'controller'=>'Users', 'plugin'=>'Accounts'));
}else{
if ($this->request->is('post') || $this->request->query('provider')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
}
bir [veriniz ... görmeye de
testi olmalıdır bu satırda olduğunu mcve] böylece çözülebilecek belirli, tekrarlanabilir bir konu var. – snakecharmerb
Ayrıca, hata mesajının sağladığı hata ayıklama ipuçlarıyla başlayarak, bunların tümü kullanıcı masasıyla ilgili olduğundan, büyük olasılıkla bir bağlantı var demektir. – ndm
@snakecharmerb Bir örnek kodu ile yazıyı güncelledim, bu yüzden bir daha baktınız! –