5

zend authを介してログインシステムを作成しました。コードは次のとおりです

// userAuthentication
   public function authAction(){
       $request     = $this->getRequest();
       $registry    = Zend_Registry::getInstance();
       $auth        = Zend_Auth::getInstance(); 
       $DB = $registry['DB'];
           $authAdapter = new Zend_Auth_Adapter_DbTable($DB);
               $authAdapter->setTableName('user')
                            ->setIdentityColumn('user_name')
                            ->setCredentialColumn('user_password');

      $username = $request->getParam('username');
      $password = $request->getParam('password');
      $authAdapter->setIdentity($username);
      $authAdapter->setCredential($password);
      $result = $auth->authenticate($authAdapter);

      if($result->isValid()){
           $data = $authAdapter->getResultRowObject(null,'password');
           $auth->getStorage()->write($data);
           $this->_redirect('/login/controlpannel');
       }else{
           $this->_redirect('/login/login');
        }
  }

これで問題なく動作します。ユーザー名とパスワードもあるユーザー(テーブル)にuser_id(列)があります。ログインしてセッションに入れるだけのこのテーブルから特定のuser_idを取得する必要があります

$user_session = new Zend_Session_Namespace('user_session');
$user_session->username = $username;
$user_id->user_id       = $user_id;

この $user_id に対していくつかの情報を照会し、結果をビュー (名前) コントロールパネルに渡すことができるように

4

6 に答える 6

8

ストレージからユーザーIDを取得します:

$userInfo = Zend_Auth::getInstance()->getStorage()->read();

echo $userInfo->user_id;
于 2012-01-25T11:41:15.587 に答える
8

これはすでに回答されていますが、チェーンgetIdentity()よりも関数を頻繁に使用する傾向があります。getStorage()->read()以下に例を示します。

// to check if authenticated
Zend_Auth::getInstance()->hasIdentity();

// to actually get the details from storage
Zend_Auth::getInstance()->getIdentity()->user_id;

// if I need to use the identity over and over
$identity = Zend_Auth::getInstance()->getIdentity();
$userId = $identity->user_id;
于 2012-05-09T18:41:42.770 に答える
3

Teezが提案する方法でデータにアクセスするか、Zend_Session_Namespaceからデータをプルすることができます。

15.1.3.1。PHPセッションのデフォルトの永続性
デフォルトでは、Zend_Authは、PHPセッションを使用した認証試行の成功からIDの永続的なストレージを提供します。認証が成功すると、Zend_Auth :: authenticate()は認証結果のIDを永続ストレージに保存します。特に設定されていない限り、Zend_AuthはZend_Auth_Storage_Sessionという名前のストレージクラスを使用し、Zend_Auth_Storage_SessionはZend_Sessionを使用します。代わりに、Zend_Auth_Storage_InterfaceをZend_Auth :: setStorage()に実装するオブジェクトを提供することにより、カスタムクラスを使用できます。

Zend_Auth_Storage_Sessionは、「Zend_Auth」のセッション名前空間を使用します。この名前空間は、Zend_Auth_Storage_Sessionのコンストラクターに別の値を渡すことでオーバーライドでき、この値はZend_Session_Namespaceのコンストラクターに内部的に渡されます。Zend_Auth :: authenticate()はIDの自動保存を実行するため、これは認証が試行される前に発生する必要があります。

于 2012-01-25T11:43:08.600 に答える
1

これは私のアプローチであり、うまく機能しています: 1-i ブートストラップで init 関数を定義することから始めます

protected function _initSession()
{

    $UserSession = new Zend_Session_Namespace('UserSession');
    $UserSession->setExpirationSeconds(/* you may fix a limit */);
    Zend_Registry::set('UserSession', $UserSession);
}

/* Login アクションで、正しいユーザー名とパスワードの後に​​ */

 // Create session
    $UserSession = Zend_Registry::get('UserSession');
 // Get the user from database 
 $db = Zend_Db_Table::getDefaultAdapter();
 $user = $db->fetchRow("SELECT * FROM user_table WHERE user_email = '".$user_email."'");

 //then you assign to $user to $UserSession variable : 
 $UserSession->user = $user;

 //finaly don't forget to unset session variable in the Logout action ...
于 2013-06-05T11:06:54.347 に答える
0
user = Zend_Auth::getInstance()->getIdentity(); if(!@$this->user){ $objSession->errorMsg = "最初にログインしてください .. ! "; $this->_redirect('/user/login'); } ?>
于 2014-10-08T10:00:55.020 に答える