ホームページ  >  記事  >  バックエンド開発  >  Yii_PHPチュートリアルで新しいユーザー認証を追加する方法の詳細な説明

Yii_PHPチュートリアルで新しいユーザー認証を追加する方法の詳細な説明

WBOY
WBOYオリジナル
2016-07-21 15:04:46822ブラウズ

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 の承認を指定できます

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327749.html技術記事 1. 新しいユーザー認証を追加する必要がある理由: 同じ yii アプリケーション内に Web サイトのバックエンドとフロントエンドを構築したいためですが、フロントエンドにもメンバー管理センターが含まれており、これら 2 つのユーザー認証は完了しています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。