質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

1回答

3862閲覧

CakePHP2.4.2でBlowfishを使ったログイン

1nakaji

総合スコア187

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2015/10/13 07:43

編集2015/10/13 07:48

CakePHP2.4.2でBlowfishを使ったログインの処理ではまっております。
以前に一度実装したのですが、今回はなぜかうまく実装ができていません。

usersテーブルへの登録自体はうまくいっているのですが、
どうもログイン時にパスワードが一致しないようです。

sql

1CREATE TABLE users ( 2 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 3 username VARCHAR(50), 4 password VARCHAR(255), 5 created DATETIME DEFAULT NULL, 6 modified DATETIME DEFAULT NULL 7);

php

1<?php 2 3//app/Controller/UsersController.php 4App::uses('AppController', 'Controller'); 5 6class UsersController extends AppController { 7 8 public $name = "Users"; 9 public $components = array( 10 'DebugKit.Toolbar', 11 'Session', 12 'Cookie', 13 'Security', 14 'Auth' => array( 15 'authError' => 'ログインしてください。', 16 'authenticate' => array( 17 'Form' => array( 18 'passwordHasher' => 'Blowfish' 19 ) 20 ), 21 'authorize' => array('Controller'), 22 'logoutRedirect' => array('controller' => 'Users', 'action' => 'login'), 23 'loginAction' => array('controller' => 'Users', 'action' => 'login'), 24 ) 25 ); 26 27 public function beforeFilter() { 28 parent::beforeFilter(); 29 $this->Auth->allow('registerUser','login','logout'); 30 $this->Security->requireAuth('registerUser','login'); 31 } 32 33 public function login(){ 34 35 if ($this->request->is('post')) { 36 if($this->Auth->login()){ 37 return $this->flash('認証に成功しました。', '/users/index'); 38 }else{ 39 return $this->flash('認証に失敗しました。', '/users/index'); 40 } 41 } 42 } 43 44 public function registerUser(){ 45 46 if ($this->request->is('post')) { 47 $this->User->create(); 48 if ($this->User->save($this->request->data)) { 49 $this->Session->setFlash(__('The user has been saved.')); 50 exit; 51 #return $this->redirect(array('action' => 'index')); 52 } else { 53 $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 54 } 55 } 56 } 57} 58

php

1 2<?php 3 4App::uses('AppModel', 'Model'); 5App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); 6 7// app/Model/User.php 8class User extends AppModel { 9 10 public $validate = array( 11 'username' => array( 12 'notEmpty' => array( 13 'rule' => array('email'), 14 'message' => 'メールアドレスかパスワードに誤りがあります。' 15 ), 16 'isUnique' => Array( 17 'rule' => 'isUnique', 18 'message' => 'すでに登録のあるメールアドレスです。' 19 ) 20 ), 21 'password' => array( 22 'notEmpty' => array( 23 'rule' => array('custom', '/\A[A-Za-z0-9_()\*\+,\-\.\/:;<=>?]{8,150}\z/'), 24 'message' => 'パスワードの形式が不正です。' 25 ) 26 ) 27 ); 28 29 public function beforeSave($options = array()) { 30 if (isset($this->data[$this->alias]['password'])) { 31 $passwordHasher = new BlowfishPasswordHasher(); 32 $this->data[$this->alias]['password'] = $passwordHasher->hash( 33 $this->data[$this->alias]['password'] 34 ); 35 } 36 return true; 37 } 38} 39

app/Controller/AppController.phpなどには手を入れていません。

ちなみにBlowfishを使わずに、
登録・ログインをした場合には正常にログイン処理が行えます。

php

1 public function beforeSave($options = array()) { 2 $this->data['User']['password'] = AuthComponent::password( 3 $this->data['User']['password'] 4 ); 5 return true; 6 } 7}

beforeSaveメソッドを上記に変更、
UsersController.phpのcomponents内の
以下をコメントアウトすると正常に動作。

php

1 'passwordHasher' => 'Blowfish'

おそらくは単純なミスかと思いますが、
はまってしまって抜け出せずにいます。

他に必要な処理などがあるか、
何かお気付きの点があれば教えていただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

二点確認して欲しいです。
(1) phpにmcryptがインストールされているか?
-> mcryptがインストールされていないとBlowfishは使えません。
インストール状況はphpinfoで確認してみてください。
php <?php phpinfo(); ?>

(2) varchar(255)で暗号化されたパスワードが切り詰められていませんか?
-> 暗号化された文字列は平文より少し長くなりますので、255byteだと長さが足らないかも知れません。
暗号化パスワードが255byte以上の長さになっている場合、insertされた暗号文は復号できないので認証エラーになります。

投稿2015/10/13 16:04

io_ohta

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1nakaji

2015/10/13 17:04

ご回答ありがとうございます。 mcryptについては問題ないですね。 きちんとインストールはされていました。 >varchar(255)で暗号化されたパスワードが切り詰められていませんか? こちらは確かに可能性があるかもしれません。 一度確認してみます。 また何かお気付きの点があれば教えて下さい。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問