2016-04-09 34 views
1

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')); 
      } 
     } 
    } 

Hata Sayfası enter image description here

+0

bir [veriniz ... görmeye de

$User = $this-> newEntity ([ 'username' => 'valorunico', 'user' => $profile-> email, 'role_id' => 1]); 

testi olmalıdır bu satırda olduğunu mcve] böylece çözülebilecek belirli, tekrarlanabilir bir konu var. – snakecharmerb

+0

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

+0

@snakecharmerb Bir örnek kodu ile yazıyı güncelledim, bu yüzden bir daha baktınız! –

cevap

-1

hata

$User = $this-> new Entity (['email' => $profile-> email]); 

Sen

+0

modelini okumaya çalışırsanız, Hesaplar eklentisi olarak kullanıcı eklentisi olan Hesaplar eklentisi içinde çalıştığı için eklenti olarak çalıştığımı gözlemleyeceksiniz, ancak Hibrid Auth Eklentisi'nde kullanıcı modeline src-> model-> tablodan hesaplar yerine erişmeye çalışın. > src-> model-> tablo, kısa bir süre içerisinde HybridAuth modelinde sınıf adı eksikti. –