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

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

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

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

Q&A

解決済

2回答

5322閲覧

cakephpでユーザー情報を編集したい場合

affluenceyou

総合スコア44

CakePHP

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

0グッド

1クリップ

投稿2014/10/05 02:54

cakephpでログインしているユーザーが、自分のユーザー情報(名前、アイコンなど)を編集したい場合どのようにすればいいのでしょうか? 現在コントローラ側が、

lang

1public function edit($id =null) { 2 $user_data =$this->User->find('first',array( 3 'conditions'=>array( 4 'id'=>$id, 5 ) 6 )); 7 $this->set('user_data',$user_data); 8 9 $this->User->id = $id; 10 11 12 if($this->request->is('get')) { 13 $this->request->data = $this->User->read(); 14 15 16 } else { 17 if($this->User->save($this->request->data)) { 18 $this->Icon->saveAll($this->request->data["Icon"]); 19 $this->Session->setFlash('success!'); 20 $this->redirect(array('action'=>'index')); 21 } else { 22 $this->Session->setFlash('failed!'); 23 } 24 }

ビュー側が

lang

1<?php 2 3debug($user_data); 4echo $this->form->create('User',array('type'=>'post','type' => 'file')); 5echo $this->form->input('userId',array('label'=>'名前')); 6echo $this->form->hidden('password',array('value'=>$user_data['User']['password'])); 7 8if(isset($user_data['Icon']['0']['id'])){ 9 echo $this->Form->hidden('Icon.id',array('value'=>$user_data['Icon']['0']['id'])); 10} 11echo $this->Form->hidden('Icon.user_id',array('value'=>$user_data['User']['id'])); 12echo $this->Form->file('Icon.icon'); 13echo $this->Form->error('Icon.icon'); 14 15 16echo $this->form->end('編集する');

でやってみました。
しかしこれだと、現在のハッシュ化されたパスワードを更に書き込んでいるため、二重にハッシュ化されたものが新たに登録されてしまうことになります。なので、最初に入力したパスワードでログインすることができなくなってしまいます。ちなみに、ハッシュ化するのは、beforeSaveで行っています。コードは、

lang

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

です。
パスワードなどの知識が色々曖昧です。
ユーザーがパスワードを入力して、自分の情報を変えるにはどのようにすればいいのか。また、自分のパスワードを変えるにはどのようにすればいいのか、教えていただけると嬉しいです。
よろしくお願いします!!!

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

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

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

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

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

guest

回答2

0

Viewを見る限り、パスワードの変更はこのViewでは行っていないようなので、
パスワードのフィールド自体不要かと、ちょっとうろ覚えで申し訳ないですが、DBに格納されている。
パスワードの値は、本来入力された(例えば123456)パスワードを暗号化した値なので
Hiddenでフィールドを用意していると、暗号化されたパスワードを更に暗号化する事になりログインとかできなくなるような・・・・

バリデーションはかけてないようですが、一時的にパスワードのバリデーションを無効にするのがいいかと
またbeforeSaveもそのコードだと、仮に空白の場合でもなんか暗号化してたような気がします。

public function beforeSave($options = array()) {
if(isset($this->data[$this->alias]['password'])){
$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
}
return true;
}

下記のように値が入ってれば暗号化処理を行うというようにすると安心かと思います

投稿2014/10/08 20:52

stay

総合スコア24

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

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

0

ベストアンサー

CakePHPでのやり方はわかりませんが、パスワードとそれ以外のユーザ設定を同じ画面で変更させる場合、パスワード未入力の場合はパスワード変更なしとするのが一般的な気がします。
なので、画面に表示するときはパスワードは空欄として、未入力の時はパスワードを更新しないように実装すればいいかと思います。

投稿2014/10/05 05:43

TaMaMhyu

総合スコア1356

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

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

affluenceyou

2014/10/05 06:08

cakephpではユーザーのパスワードを入力しないと、データーベースの更新が出来ないようなのです。だから、hiddenで送っているのですが、hiddenで送る本来のパスワードとは違ったものになってしまうということです><
TaMaMhyu

2014/10/05 06:22

そういう意味だと、画面を表示する際にパスワードを初期値として入れるのが間違いではないかと思います。 常にパスワードを入力させるのではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問