1. 新しいユーザー認証を追加する必要があるのはなぜですか:
同じ yii アプリケーション内に Web サイトのバックエンドとフロントエンドを作成したいためです。そして、これら 2 つのユーザー認証は次のとおりです。完全に異なるため、2 つの異なるログイン ページが必要となり、ユーザー情報は異なる Cookie またはセッションに保存される必要があります。そのため、ユーザー認証をアプリケーションに追加する必要があります
2.yii userverification:
。ユーザー検証を定義する前に、まず Yii の検証メソッドと認可メソッドを理解する必要があります
ユーザーを検証するには、検証ロジックを備えた検証クラスを定義する必要があります。Yii では、このクラスは IUserIdentity インターフェイスとさまざまなクラスを実装する必要があります。ウェブサイトのログインには通常、ユーザー名とパスワードの検証が必要です。Yii は、通常、ユーザー名とパスワードの検証に使用される CUserIdentity クラスを提供し、独自のメソッドを実装するために、authenticate() メソッドをオーバーライドする必要があります。 検証メソッドは次のとおりです:
Php コード
コードは次のとおりです:
class UserIdentity extends CUserIdentity
{
public functionAuthenticate()
{$ record :: model() - > $ Record->id
$this->setState('title', $record->title); t;errorCode を使用します }
public function getId()
$this->_id を返す;
}
}
ユーザーがログインすると、次のコードが呼び出されます:
Php コード
コードをコピー
コード 次のように:
// 提供されたユーザー名とパスワードを使用してログに記録しますユーザーに
$identity=new UserIdentity($username,$password);
if($identity->authenticate())
Yii::app()-> ;user->login($identity);
else
echo $identity->errorMessage;
ユーザーがログアウトすると、次のコードが呼び出されます: Php コード
コードをコピーします
コードは次のとおりです:
/ / 現在のユーザーをログアウトします
Yii::app()->user->logout();
ユーザーは protected/config/main.php で定義する必要があります
code
コードをコピー コードは次のとおりです。
'user'=>array(
// Cookie ベースの認証を有効にする
'allowAutoLogin'=>true,
'loginUrl' => array( 'site/login'),
),
Yii ではデフォルトで user が CWebUser クラスのインスタンスであるため、ここではユーザーのログイン検証を実装しました。しかし、ログインしているかどうかに関係なく、ユーザーはすべてのアクションにアクセスできるようになりました。そのため、Yii では、ユーザーの承認はアクセス制御フィルターを通じて実装されます。単純なアクセス制御フィルターを見てみましょう:
Php コード
コードをコピーします
コードは次のとおりです:
DClass AdminDefaultController Extends CController {
Public Function Filters () {
Return Array accessRules () {
Return array ' => array('@'),
array('*')
filters メソッドで特定のフィルターを設定します。 filters メソッドによって返された配列に accessControl パラメータがあることがわかります。 CController クラスに filterAccessControl メソッドがあります:
Php コード
コードをコピーします
コードは次のとおりです:
public関数 filterAccessControl($filterChain)
{
$filter=new CAccessControlFilter;
$filter->setRules($this->accessRules())
}
;新しい CAccessControlFilter インスタンスが内部で作成され、setRules
$filter->filter($filterChain) が他のフィルターを呼び出し続けるときに、accessRules() メソッドによって返されるパラメーターが渡されます。
ルールは次のとおりです。 accessRules で定義:
Php コード
コードをコピー コードは次のとおりです:
public function accessRules()
'actions'=> ;array('create', 'edit'),
t;array('delete'), 'ROLES' = & GT; Array ('Admin'),
),
Array ('DENY',
'Actions' = & GT; Array ('Delete'),
'ユーザー = & GT; Array ('*' ),
);
コードをコピーする class CAdminWebUser extends CWebUser
{
public $loginUrl = array('管理者/管理者/ログイン } ;
コンポーネントに配置する必要があります
グローバルアプリケーションの場合は、protected/config/main.php:
Phpコードのコンポーネントセクションを渡します
コードをコピーしますコードは次のとおりです:
'user'= >array(
// Cookie ベースの認証を有効にする
'class' => 'CAdminUser',
'allowAutoLogin'=>true,
'loginUrl' => array('site/ login'),
) ,
モジュール内にある場合は、モジュール クラスの init メソッドに次のコードを追加します:
Php コード
コードをコピー コードは次のとおりです:
$this->setComponents(array(
'adminuser' = & gt; array (
'class' = & gt; 'cadminwebuser',
'allowautologin' = & gt; false,
)); コード
コードは次のとおりです:
//グローバルアプリケーション
Yii::app()->getComponent('adminUser'); //モジュール内
Yii::app()->controller-> ->getComponent('adminUser');
しかし、これだけでは不十分です。別のユーザーの検証と承認を実装するには、フィルターをカスタマイズする必要もあります。フィルターを定義します:
Php コード
コードをコピーします
コードは次のとおりです:
class CAdminAccessControlFilter extends CAccessControlFilter
{ protected function preFilter($filterChain)
$app=Yii::app() ;
$request=$app->getRequest(); $user = Yii::app()->controller->module->getComponent('adminUser'); $verb=$request-> getRequestType (); $user、$filterChain->controller、$filterChain->action、 $ip,$verb))>0) // 許可されます $this- >accessDenied($user); return false; CController クラスの filterAccessController メソッドをオーバーライドします
Php コード
コードをコピーします
コードは次のとおりです:
public function filterAccessControl($filterChain)
{
$filter = new CAdminAccessControlFilter() ;
$filter->setRules($this->accessRules());
$filter->filter($filterChain );
//ここでは、元のフィルターを置き換えます。
OK、ここで、このコントローラーの accessRules() で adminUser の承認を指定できます
http://www.bkjia.com/PHPjc/327749.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327749.html技術記事 1. 新しいユーザー認証を追加する必要がある理由: 同じ yii アプリケーション内に Web サイトのバックエンドとフロントエンドを構築したいためですが、フロントエンドにもメンバー管理センターが含まれており、これら 2 つのユーザー認証は完了しています。