2017-02-23 15 views
1

Я создаю логин формы с помощью ExtJS и отправляю данные JSON для аутентификации в Zend Framework. Проблема в том, что независимо от того, какое имя пользователя и пароль я заполняю, логин всегда преуспевает. Вот связанный код:JSON Login Authentification Zend Framework

Отправить функцию для Ext JS Form, где мы отправляем данные JSON, содержали имя пользователя и пароль.

var doLogin = function() { 
    if (formPanel.getForm().isValid()) { 
     formPanel.getForm().submit({ 
      method: 'POST', 
      url: '/zend/public/auth/valid', 
      waitMsg: 'Processing Request', 
      success: function (form, action) { 
       document.location = '/zend/public/guestbook'; 
      }, 
      failure: function (form, action) { 
       if (action.failureType = 'server') { 
        obj = Ext.util.JSON.decode(action.response.responseText); 
        Ext.Msg.alert('Login Failed', obj.errors.reason); 
       } else { 
        Ext.Msg.alert('Warning!', 'Authentification server is uneachable : ' + action.response.responseText); 
       } 
       formPanel.getForm().reset 
      } 
     }) 
    } 
} 

Контроллер, мы имеем функцию ValidAction получать и отправлять данные в формате JSON, и процесс, чтобы сделать аутентификацию.

public function validAction() 
{ 
    if(!isset($this->session->isLogin)){ 
     $username = mysql_escape_string($_POST['username']); 
     $password = mysql_escape_string($_POST['password']); 

     $formdata = array('username'=>$username, 'password'=>$password); 
     if ($this->_process($formdata)) { 
      $this->session->setExpirationSeconds(3600); 
      $msg = '{success:true, result:{message:\'Welcome, '.$username.'!\'}}'; 
     } else { 
      $msg = '{success:false, errors:{reason:\'Login failed, try again.\'}}'; 
     } 
    } 

protected function _process($values) { 
    // Get our authentication adapter and check credentials 
    $adapter = $this->_getAuthAdapter(); 
    $adapter->setIdentity($values['username']); 
    $adapter->setCredential($values['password']); 

    $auth = Zend_Auth::getInstance(); 
    $result = $auth->authenticate($adapter); 
    if ($result->isValid()) { 
     $user = $adapter->getResultRowObject(); 
     $auth->getStorage()->write($user); 
     return true; 
    } 
    return false; 
} 

Проблема заключается в validAction, и удачливый я var_dump до $ this-> процесс ($ FormData) и возвращает ложь, но она всегда идет к тому, если функция, сообщение об успехе. Есть идеи? Оцененные ребята.

UPDATE:

var_dump:

Uncaught Error: You're trying to decode an invalid JSON String: 
array(2) { 
    ["username"]=> 
    string(2) "ad" 
    ["password"]=> 
    string(4) "pass" 
} 
bool(false) 
string(59) "{success:false, errors:{reason:'Login failed, try again.'}}" 
+0

какая версия php вы используете? Мне просто интересно узнать, поддерживает ли ваша система функцию 'mysql_'. –

+0

Да, это php 5. Я var сбрасывал $ username и переменную $ password тоже и преуспел ... Это как-то связано с проблемой? –

+0

трудно сказать. У меня создалось впечатление, что ваша система не поддерживает функции 'mysql_ * '. запускать отчет об ошибках и многое другое var_dumps, чтобы увидеть, что происходит или нет, и сравнить с введенными значениями. –

ответ

0

проблема Backend

Вы выводя недопустимый JSON.

PHP предоставляет json_encode, чтобы сохранить приходилось вручную создавать JSON:

$response=array(); 
$response['success']=false; 
$response['result']=array(); 
$response['message']='Welcome '.$username; 
$msg = json_encode($response); 

Если вы действительно не хотите использовать эту функцию, вы должны добавить двойные кавычки ключи, и изменения в двойные кавычки для строки свойства тоже:

$msg = '{"success":true, "result":{"message":"Welcome, '.$username.'!"}}'; 

передняя проблема

Вы используете методы успеха и отказа, но я ничего не вижу в вашем заднем конце кода в себе nd.

Метод отказа будет вызван только тогда, когда ответ вернется с кодом статуса не 200. Таким образом, вам может потребоваться либо добавить это к вашему заднему концу, и/или также декодировать ответ внутри вашего метода успеха, чтобы убедиться, что вы отправили успех: true как часть вашего json перед перенаправлением.

Чтобы отправить заголовок в PHP 5.4 или новее:

http_response_code(401); 

в 5.3 или старше, вы должны использовать header метод вместо этого - но если вы используете эту версию, вы должны обновить сразу так я не буду включать пример ,

+0

Благодарим вас за код ответа, поэтому я положил его в другое условие, var $ msg должен быть передан для просмотра индекса справа?Когда он передается, он должен быть вызван Ext, предупреждающий, что логин завершился неудачно, но мой не работает так, как предполагается. У тебя есть идеи? P.S. переданная переменная msg при неправильном имени пользователя и пароле имеет успех false –

Смежные вопросы