php - लॉग इन[एथ-> पहचानें()] हमेशा केपी पीएचपी 3 पर गलत है




cakephp authentication (3)

मैंने CakePHP 2 का उपयोग करते हुए केकपीएचपी 3 का उपयोग करना शुरू कर दिया और मुझे प्रमाणीकरण लॉगिन बनाने में परेशानी हो रही है।

नया $this->Auth->identify() फ़ंक्शन $this->Auth->identify() हमेशा झूठी वापसी करता है

डेटाबेस पर, पासवर्ड सही एन्क्रिप्ट किया जाता है और क्वेरी जो उपयोगकर्ता को ठीक भी लेता है।

मेरा कोड:

AppController:

[...]
class AppController extends Controller{
    public function initialize(){
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginRedirect' => [
                'controller' => 'Admin',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Pages',
                'action' => 'display'
            ]
        ]);
    }

    public function beforeFilter(Event $event)
    {
        $this->Auth->allow(['display']);
    }
}

UserController:

[...]
class UsersController extends AppController{
    public function beforeFilter(Event $event)
    {
    parent::beforeFilter($event);
    $this->Auth->allow(['logout']);
    }
[...]
    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, try again'));
        }
    }
[...]

उपयोगकर्ता (मॉडल इकाई):

<?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity{
    protected $_accessible = [*];
    protected function _setPassword($password){
        return (new DefaultPasswordHasher)->hash($password);
    }
}

राय:

<div class="users form">
<?= $this->Flash->render('auth') ?>
<?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('Please enter your username and password') ?></legend>
        <?= $this->Form->input('username') ?>
        <?= $this->Form->input('password') ?>
    </fieldset>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end() ?>
</div>

केकपीएचपी 3 2 से अलग हैशिंग एल्गोरिथ्म का उपयोग करता है (बीसीआरपीटी बनाम SHA1), इसलिए आपको अपना पासवर्ड लम्बाई अब करना चाहिए। सुरक्षित होने के लिए अपना पासवर्ड फ़ील्ड VARCHAR (255) में बदलें

जब केकपीएचपी 3 आपके इन-मेमोरी हैहेड पासवर्ड को इस-> एथ-> पहचान () बनाम डेटाबेस में हैशड पासवर्ड पहचानने की कोशिश करता है, यह कभी भी मेल नहीं खाएगा क्योंकि कुछ अक्षर गायब हैं। 255 में बदलने से ज़्यादा ज़रूरी है, लेकिन भविष्य के प्रमाण में मदद कर सकता है अगर भविष्य में एक भी अधिक सुरक्षित हैश का उपयोग किया जाता है। 255 अनुशंसित है क्योंकि चरित्र गिनती एक बाइट में संग्रहीत की जा सकती है।


हल: डाटाबेस पर टाइप की आवश्यकता से कम था। Varchar (255) में बदल दिया और अब ठीक काम करता है :)


हाय हाय, मेरे स्निपेट्स को लॉगऑन एथ से साझा करें, केक पीएचपी 3.1 में सभी परीक्षण ठीक है, टैबलेट + दृश्य लॉगिन बूटस्ट्रैप 3 + एसक्यूएल बेस + कस्टम बूटस्ट्रैप.एफ़पीपी स्पैनिश इन इन्फ्लक्टर :: नियम (*******)) में है

सभी कोड में

https://bitbucket.org/snippets/eom/rLo49