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

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

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

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

Q&A

0回答

918閲覧

cakePHPでログインの際にユーザーネームだけでログインしてしまいます

usakuma

総合スコア9

CakePHP

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

0グッド

0クリップ

投稿2018/07/25 05:53

cakePHP2.6でloginシステムを作っています

お客様に会員情報登録を入力してもらい、仮登録の受付の際に、仮パスワードの発行(ランダムな英数字をメールにて送付)
お客様は、自身のメールアドレスをユーザーネームにして、仮パスワードでログインしてもらい、パスワードを新しく入力してもらい、本登録完了という流れなのですが、ログインのところでつまづきました
問題はパスワード未入力でもにユーザーネーム(メールアドレス)だけでログインできてしまうことです

usersController(抜粋)

cakePHP

1 2public $components = array('Paginator','Session', 3 'Auth' => array( 4 'loginRedirect'=>array( 5 'controller'=>'Users', 6 'action'=>'activate' 7 ), 8 'logoutRedirect' => array( 9 'controller' => 'Users', 10 'action' => 'login' 11 ), 12 'loginAction' => array ( 13 'controller' => 'Users', 14 'action' => 'login' 15 ), 16   'authenticate' => array( 17 'Form' => array( 18    'userModel' => 'User', 19   'fields' => array( 20                 'username' => 'email', 21                 'password' => 'password') 22 ) 23 ), 24 ) 25 ); 26 27 public $uses=array('User'); 28 29 30public function login(){ 31 if ($this->request->is('post')) { 32 if ($this->Auth->login($this->request->data['User'])) { 33 $user = $this->Auth->user(); 34 return $this->redirect($this->Auth->redirectUrl()); 35 } else { 36 $this->Session->setFlash (_('ログインに失敗しました。正しいユーザー名(メールアドレス)とパスワードを入力してください。')); 37 } 38 } 39 }

User.php

cakePHP

1public $validate = array( 2 "company"=> array( 3 'notEmpty' => array( 4 'rule' => array('notEmpty'), 5 'message' => '入力は必須です。', 6 ), 7 ), 8 "company_kana"=> array( 9 'notEmpty' => array( 10 'rule' => array('notEmpty'), 11 'message' => '入力は必須です。', 12 ), 13 "custom" => array( 14 'rule' => array('custom', '/^[ア-ンヴァィゥェォー]*$/u'), 15 'message' => '全角カタカナで入力して下さい。', 16 ), 17 ), 18 "zip1"=> array( 19 'notEmpty' => array( 20 'rule' => array('notEmpty'), 21 'message' => '入力は必須です。', 22 ), 23 'custom'=>array( 24 'rule'=>array('custom','/^[0-9]{3}$/'), 25 'message'=>'3桁の数字を入力して下さい。', 26 ), 27 ), 28 "zip2"=> array( 29 'notEmpty' => array( 30 'rule' => array('notEmpty'), 31 'message' => '入力は必須です。', 32 ), 33 'custom'=>array( 34 'rule'=>array('custom','/^[0-9]{4}$/'), 35 'message'=>'4桁の数字を入力して下さい。', 36 ), 37 ), 38 "pref"=> array( 39 'notEmpty' => array( 40 'rule' => array('notEmpty'), 41 'message' => '入力は必須です。', 42 ), 43 ), 44 "city"=> array( 45 'notEmpty' => array( 46 'rule' => array('notEmpty'), 47 'message' => '入力は必須です。', 48 ), 49 ), 50 "town"=> array( 51 'notEmpty' => array( 52 'rule' => array('notEmpty'), 53 'message' => '入力は必須です。', 54 ), 55 ), 56 "tel"=> array( 57 'notEmpty' => array( 58 'rule' => array('notEmpty'), 59 'message' => '入力は必須です。', 60 ), 61 'custom'=>array( 62 'rule' => array('custom', '/^(0\d{1,4}[\s-]?\d{1,4}[\s-]?\d{4})$/'), 63 'message'=>'電話番号の入力が正しくありません。', 64 ), 65 ), 66 "charge"=> array( 67 'notEmpty' => array( 68 'rule' => array('notEmpty'), 69 'message' => '入力は必須です。', 70 ), 71 ), 72 "email"=> array( 73 'notEmpty' => array( 74 'rule' => array('notEmpty'), 75 'message' => '入力は必須です。', 76 ), 77 'email'=>array( 78 'rule' => array( 'email'), 79 'message' => 'メールアドレスを入力して下さい。', 80 ), 81 'custom'=>array( 82 'rule'=>'isUnique', 83 'message'=>'入力のメールアドレスは登録済みです。', 84 ), 85 ), 86 "username" => array( 87 // メールアドレスであること。 88 'notEmpty' => array( 89 'rule' => array('notEmpty'), 90 'message' => '入力は必須です。', 91 ), 92 'validEmail' => array( 93 'rule' => array( 'email', true), 94 'message' => 'アドレスを入力して下さい' 95 ), 96 ), 97 "password"=> array( 98 'notEmpty' => array( 99 'rule' => array('notEmpty'), 100 'message' => '入力は必須です。', 101 ), 102 'alphaNumeric' => array( 103 'rule' => '/^[a-z\d]*$/i', 104 'message' => '半角英数で入力してください', 105 ), 106 'custom'=>array( 107 'rule' => array('between', 6, 6), 108 'message' => '6文字で入力して下さい。', 109 ), 110 'password'=>array( 111 'rule'=>array('confirm'), 112 'message'=>'パスワードが一致しません', 113 ), 114 ), 115); 116 117 public function confirm($check){ 118 foreach ($check as $key => $value) { 119 if ((! isset($this->data[$this->name][$key.'_confirm'])) or ($value !==$this->data[$this->name][$key.'_confirm'])){ 120 return false; 121 } 122 } 123 return true; 124 } 125 126public function beforeSave($options = array()) { 127 if (isset($this->data[$this->alias]['password'])) { 128 $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 129 } 130 return true; 131 }

loginアクションの中の
if ($this->Auth->login($this->request->data['User'])) {

if ($this->Auth->login()) {
にしてログイン(パスワード未入力、メールアドレスのみ)すると、どんなメールアドレスだとしてもデータベースの1件目が表示されてしまいます

バリデーションがおかしいのでしょうか?

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問