2

プレーンテキストのパスワード フィールドを持つ既存のデータベースに CakePHP 2 Web サイトを実装したいと思います。

これは私のAppControllerです

class AppController extends Controller {
  public $components = array(
    'Session',
    'Auth' => array(
      'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
      'logoutRedirect' => array('controller' => 'users', 'action' => 'home'),
      'authError' => 'You cannot view this page',
      'authorize' => array('Controller'),
      'authenticate' => array(
        'Form' => array(
          'userModel' => 'User',
          'fields' => array('username' => 'user_id', 'password' => 'user_password')
        )
      )
    )
  ); 

  public function isAuthorized($user) {
    return true;
  }

  function beforeFilter() {
    $this->Auth->allow('home');
    //$this->Auth->authenticate = $this->User;

    parent::beforeFilter();
  } 

これは私の UserController です。

class UsersController extends AppController {
  public $paginate = array(
    'fields' => array('user_id', 'user_desc', 'user_password'),
    'limit' => 25,
    'order' => array(
      'user_id' => 'asc'
    )
  );

  function login() {
    if ($this->request->is('post')) {
      if ($this->Auth->login()) {
        $this->redirect($this->Auth->redirect());
      } else {
        $this->Session->setFlash('Cannot Login');  
      }
    }
  }
}

これは私のユーザーモデルです

class User extends AppModel {
  public $name = 'User';
  public $primaryKey = 'user_id';
  public $belongsTo = 'Group'; 
}

上記のファイルによると、login.ctp の [ログイン] ボタンを押すと、

select * from users where user_password = 'this_is_hashing_password'

SQLダンプセクション。

では、自動ハッシュアルゴリズムをオフにして、login() がユーザー入力とデータベースに保存されたパスワードをプレーンテキストとして比較する方法を教えてください。

私は CakePHP の本をたくさん読んでみましたが、インターネットから見つけた hashPasswords($data) テクニックを使用しても何も見つかりません。

助けてください。コンタップ。

4

2 に答える 2

2

最善の答え、保存されたパスワードをバッチ処理してハッシュ化することですが、既存のアプリケーションに Cake アプリを追加して、パスワードを別の方法でハッシュ化する (たとえば、パスワードをまったくハッシュ化しないなど) 場合もあります。この場合のゴールがそうでなくても有効です。

Cake のバージョンに応じて、Cake のパスワード ハッシュ関数を変更するには、次のリソースを試してください。

于 2012-11-06T18:26:41.580 に答える
0

で動作するプレーンテキストのパスワードを取得しました。これは開発Cakephp 3目的でのみ使用する必要があり、本番環境ではパスワードをプレーンテキストで保存しないでください。

そうは言っても、開発中はプレーンテキストのパスワードを使用することで、完全に機能するユーザーの暗号化/復号化ロジックを実装する代わりに、ログインに集中することができます。いずれにせよ、これは OAuth / SAML モジュールに置き換えられます...

OKここにソースコードがあります:

ROOT/src/Auth/PlainTextPasswordHasher.php

<?php
namespace App\Auth;

use Cake\Auth\AbstractPasswordHasher;
/**
 * Plain text password for demo use, DO NOT PUSTH THIS TO PROD
*/
class PlainTextPasswordHasher extends AbstractPasswordHasher
{

    public function hash($password)
    {
        return $password;
    }

    public function check($password, $hashedPassword)
    {
        return $password === $hashedPassword;
    }
}

ROOT/src/Controller/PagesController.php

<?php
class PagesController extends AppController
{

    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'fields' => [
                        'username' => 'username',
                        'password' => 'password',
                    ],
                    'passwordHasher' => [
                        'className' => 'PlainText',
                    ],
                    'userModel' => 'YourUsers',
                ]
            ],
            'loginAction' => [
                'controller' => 'Logins',
                'action' => 'login'
            ]
        ]);
    }
}

ソース: このビデオhttps://www.youtube.com/watch?v=eASSNS1f3V4および公式ドキュメントのこのセクション: https://book.cakephp.org/3.0/en/controllers/components/authentication.html#creating -custom-password-hasher-classes

于 2018-12-24T03:05:49.883 に答える