Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Module Authentification/Inscription : Fatal Error


Sujet :

MkFramework

  1. #1
    Nouveau membre du Club
    Module Authentification/Inscription : Fatal Error
    Bsr
    Lors de l'utilisation de la derniere verison j'ai voulu faire un module simple avec connexion et inscription. Cela avait fonctionné avec la version précédente sans soucis.
    Là j'ai comme retour :
    Fatal error: Call to undefined method business_auth::registerNewAccount() in C:\wamp64\www\mkframework\data\genere\ityquery2\module\private\auth\main.php on line 62
    avec
    Call Stack
    # Time Memory Function Location
    1 0.0021 264296 {main}( ) ...\index.php:0
    2 0.0048 502896 _root->run( ) ...\index.php:56
    3 0.0156 779512 module_private_auth->_inscription( ) ...\class_root.php:264
    4 0.0156 779728 module_private_auth->processInscription( ) ...\main.php:42

    Le fichier auth\main.php a été généré par MK
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php
     
    class module_private_auth extends module_private {
     
    	protected $_sModulePath = 'private/auth';
     
    	public function getView($sView_) {
    		return new _view($this->_sModulePath . '::' . $sView_);
    	}
     
    	public function _login() {
     
    		$sMessage = $this->checkLoginPass();
     
    		$oView = $this->getView('login');
    		$oView->sError = $sMessage;
     
    		$this->oLayout->add('main', $oView);
    	}
     
    	private function checkLoginPass() {
    		//if form is not sent, we stop there
    		if (!_root::getRequest()->isPost()) {
    			return null;
    		}
     
    		$sLogin = _root::getParam('login');
    		$sPassword = _root::getParam('password');
     
     
    		$oBusinessAuth = new business_auth(model_auth::getInstance(), _root::getAuth(), _root::getI18n() );
    		if (false === $oBusinessAuth->checkCredentials($sLogin, $sPassword)) {
     
    			return $oBusinessAuth->getReturn()->getData('error');
    		}
     
     
    		_root::redirect('global_default::index');
    	}
     
    	public function _inscription() {
    		$tMessage = $this->processInscription();
     
    		$oView = $this->getView('inscription');
    		$oView->tMessage = $tMessage;
     
    		$oView->oUser = new row_auth;
     
    		$this->oLayout->add('main', $oView);
    	}
     
    	private function processInscription() {
    		if (!_root::getRequest()->isPost()) {
    			return null;
    		}
     
    		$sLogin = _root::getParam('username');
    		$sPassword = _root::getParam('password');
    		$sPassword2 = _root::getParam('passwordConfirm');
     
    		$oBusinessAuth = new business_auth(model_auth::getInstance(), _root::getAuth(), _root::getI18n() );
    		if (false === $oBusinessAuth->registerNewAccount(new row_auth, $sLogin, $sPassword, $sPassword2)) {
     
    			return $oBusinessAuth->getReturn()->getData('tError');
    		}
     
    		return array('success' => array(tr('compteCreeAvecSucces')));
    	}
     
    	public function _logout() {
    		_root::getAuth()->logout();
    	}
     
     
    }


    J'ai également hâte de voir comment utiliser la nouvelle version :-)

    Merci d'avance

  2. #2
    Rédacteur

    Je viens de tester avec la mkframework_v4_130_0_r326, et autant j'ai une erreur après l'inscript (que je vais corriger)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    Array to string conversion
    #0 /var/www/html/mkframework_v4_130_0_r326/data/genere/appliSc/plugin/sc/plugin_sc_form.php(119): exception_error_handler(8, 'Array to string...', '/var/www/html/m...', 119, Array)


    Autant après je peux me connecter malgré le message avec le compte créé

    Vous pouvez verifier la classe business ? elle ne contient pas la méthode registerNewAccount ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Nouveau membre du Club
    J'ai les 2 sources suivants dans data/genere/projet/business

    business_abstract.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
    class business_abstract {
     
    	protected $oReturn;
     
    	public function sendReturn($bStatus, $tData = null) {
    		$this->oReturn=new business_return($bStatus, $tData);
    		return $bStatus;
    	}
    	public function getReturn(){
    		return $this->oReturn;
    	}
     
    	public function __get($name) {
    		throw new Exception('property ' . $name . ' unknown');
    	}
     
    }
     
    class business_return {
     
    	private $bStatus = null;
    	private $tData = null;
     
    	public function __construct($bStatus, $tData) {
    		$this->bStatus = $bStatus;
    		$this->tData = $tData;
    	}
     
    	public function getStatus() {
    		return $this->bStatus;
    	}
     
    	public function getData($sVar, $default = null) {
    		if (isset($this->tData[$sVar])) {
    			return $this->tData[$sVar];
    		} else {
    			return $default;
    		}
    	}
     
    	public function getAllData() {
    		return $this->tData;
    	}
     
    	public function setData($sVar, $uValue) {
    		return $this->tData[$sVar] = $uValue;
    	}
     
    }


    business_auth.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
     
    class business_auth extends business_abstract {
     
    	protected $_oModel;
    	protected $_oAuth;
    	protected $_oI18n;
    //maximum lenght for password
    	protected $_iMaxPasswordLength = 100;
     
    	public function __construct(interface_businessAuthModelUser $oModel_, interface_auth $oAuth_, interface_i18n $oI18n_ ){
    		$this->_oModel = $oModel_;
    		$this->_oAuth = $oAuth_;
    		$this->_oI18n=$oI18n_;
    	}
     
    	public function tr($sTag_){
    		return $this->_oI18n->tr($sTag_);
    	}
     
    	public function checkCredentials($sLogin_, $sPassword_) {
    		if (strlen($sPassword_) > $this->_iMaxPasswordLength) {
    			return $this->sendReturn(false, array('error' => $this->tr('passwordTooLong')) );
    		}
    //we store password hashed in class model_exampleToReplace
    		$sPasswordHashed = $this->_oModel->hashPassword($sPassword_);
    		$tAccount = $this->_oModel->getListAccount();
     
    //we check that we find in array returned by model class
    //entry $tAccount[ login ][ hashed password ]
    		if (isset($tAccount[$sLogin_][$sPasswordHashed])) {
    			$this->_oAuth->_connect();
    			$this->_oAuth->setAccount($tAccount[$sLogin_][$sPasswordHashed]);
     
    			return $this->sendReturn(true);
    		} else {
    			return $this->sendReturn(false, array('error' => $this->tr('badCredentials')) );
    		}
     
     
    		return $this->sendReturn(true);
    	}
    }

  4. #4
    Rédacteur

    Comme discuté par mail
    vous avez généré deux fois le module authentification: une fois sans inscription et la seconde avec inscription

    mais le builder n'écrase pas les fichiers déjà présents, vous avez donc la la classe business du module d'authentification sans inscription
    je vous invite à supprimer ce fichier et regénéré le module auth + inscription

    note: il y a un bug sur le nouveau plugin plugin_sc_form, je proposerai ce soir un correctif.
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

###raw>template_hook.ano_emploi###