3

認証やサインインなどのセッション処理は、ユーザー モデル (ユーザー モデルがユーザーを参照すると仮定) によって処理されるのが最適であり、電子メールやパスワードなどの属性があるかどうか疑問に思っていました。または、別のモデルでセッション処理を保持する必要がありますか?

これを行うための最良の方法は何ですか-関数ファイルのコントローラーにコードが部分的に散らばっていて、MVCの原則にさらに準拠するようにコードをリファクタリングしたいと考えています。私のプロジェクトは Zend Framework に基づいています。

4

2 に答える 2

1

MVCの概念では、モデルはアプリケーションのビジネス部分を表します。

認証の管理、ユーザーの保存、削除、アクティブ化はビジネス上の問題です。

したがって、ユーザーモデルで直接認証、保存、削除、アクティブ化するメソッドを作成することは理にかなっています。

したがって、ユーザーモデルでは、静的メソッドを次のように実装することが望ましいです。

public static function authenticate ($ username, $ password)
{
     $authService = $this-> getServiceLocator()->get('Zend\Authentication\AuthenticationService');
     $adapter = $authService->getAdapter();
     $adapter->setIdentityValue($username);
     $adapter->setCredentialValue($password);
     $authResult = $authService->authenticate();

     return $authResult->isValid();
}

また、コントローラーでは、次のことを直接行うことができます。

User/Entity/User::authenticate($username, $password);
于 2012-12-23T10:16:48.477 に答える
1

私は、認証とセッション管理をアプリケーション レベルの問題と見なしています。

私がよく適用する一般的な基準の 1 つは、「自分のモデルを別のアプリ (おそらくコマンドライン アプリ) や別の Web サイトで使用できますか?

たとえば、あなたの状況では、 User モデルをユーザーを表すものと見なします。そのユーザーは、実際にあなたの Web サイトにアクセスしたり、ログイン/ログアウトしたりしているかどうかに関係なく存在します。彼はコマンドライン アプリで参照される可能性があります (例: すべてのユーザーに誕生日に電子メールを送信する cron ジョブ、不完全なプロファイルを持つすべてのユーザーをカウントするレポート ユーティリティ)。そのため、認証セッションの管理はコントローラー レベル、またはサービス レベルの 1 つ下のレベルで維持します。

しかし、ほとんどのものと同様に、YMMV .

于 2012-12-25T07:45:01.260 に答える