2011-08-04 7 views
5

ユーザーがログインすると、詳細(名前、電子メール)がUIに表示されます。彼らのプロフィールを更新するときに、が更新された詳細を表示したいと思います。Zend_AuthとUIのユーザーの詳細を動的に変更する

UIの詳細は、ビューヘルパーを介してZend_Authから取得されます。 Zend_Authは 'identity'の詳細をセッションに格納しています。

にはどうすればいいのセッションで詳細を更新して行く必要がある?:私は、データベースからユーザーのログイン資格情報を取得考慮して、再度)(> Zend_Auth-を呼び出す認証するためにそれらを使用していた

  • 。問題は私がパスワードを知らないことです、それはmd5ハッシュだけです。私はmd5とsaltをバイパスするようにアダプターを構成したreauthenticate()という新しいメソッドを検討することができましたが、面倒です。

  • 私はZend_Authセッション名前空間に直接書き込むことを検討していましたが、これはトラブルのレシピのように聞こえますか?

同様の問題が発生しましたか?どのように扱ったのですか?

あなたのアイデアは大変ありがとうございます!

+0

あなたはあなたのヘルパーのデータベースからアイデンティティとローディングの名前としてメールを使用していますか? –

答えて

0

は、ここで私は当分の間、この問題を解決する方法です。それが最善の解決策だかどうかわからまだない:

  • ことにZend_Auth
  • のためのラッパーを作成getAuthAdapter($生)メソッド
  • が$生

    の値に応じて、異なったアダプタを構成含めます
    if (false === $raw) { 
        $this->_authAdapter->setCredentialTreatment('SHA1(CONCAT(?,salt))'); 
    } else { 
        $this->_authAdapter->setCredentialTreatment(); 
    } 
    
4

現在ログインしているユーザーのZend_auth IDを更新できます。ユーザー名のみを更新する非常に単純化されたアクションは、次のようになります。

public function editAction() { 


    // check if user is logged, etc, and then 
    // show the edit user form and process the data after submission. 

    $userForm = new My_Form_EditUser();  


    if ($this->getRequest()->isPost()) { 
     if ($userForm->isValid($_POST)) { 

      // process the submitted data, 
      // and when you are sure that everything went ok, 
      // update the zend_auth identity 


      $authData = Zend_Auth::getInstance()->getIdentity(); 

      // this line would depend on the format of your 
      // identity data and a structure of your 
      // actual form. 
      $authData->property->nickname = $formData['user']['nickname']; 

      $this->_helper->FlashMessenger('Your data was changed'); 
      return $this->_redirect('/'); 
     } 
    }  

    $this->view->form = $userForm; 
} 

希望します。

+0

こんにちはMarcin。これを機能させるには、エンティティをオブジェクトとして格納する必要があります。そうですか? –

+0

@Kim。私も配列で作業する必要があります。この例では、私の現在のプロジェクトでは、そのような形式でアイデンティティを格納するためにのみオブジェクトです。しかし、配列を使用する場合は、配列表記を使用してIDを変更する必要があります。 – Marcin

2

私が本当に欲しいのは、Zend_Auth::setIdentity($user)の方法です。

しかし、このような方法がないと、私は、成功したことを常に返すauthアダプターを作成し、 "本当の" authアダプターで作成したのと同じユーザーオブジェクトにIDを設定するというハックを使用しています。次に、そのアダプタでZend_Auth::authenticate($adapter)と呼ぶだけで、IDは内部的に設定されます。

さて、Zend_Auth::authenticate()の内部でmosre密接に見て、私は、私たちは何ができることがちょうどであることを参照してください。

Zend_Auth::getInstance()->getStorage()->write($user);

+0

こんにちはDavid。これはどのように機能しますか? Zend_Authにはwrite()メソッドがなく、__call()メソッドはありません。 –

+0

D'oh!打ち間違え。正しいのは 'Zend_Auth :: getInstance() - > getStorage() - > write($ user);'です。答えを訂正する。 –

関連する問題