この記事は、Yii に新しいユーザー認証を追加する方法の詳細な分析と紹介です。必要な方は参照してください。
1 なぜ追加する必要があるのか。新しいユーザーですか? 検証:
Web サイトのバックエンドとフロントエンドを同じ Yii アプリケーション内に構築したいためです。ただし、フロントエンドにはメンバー管理センターも含まれており、2 つのユーザー検証はまったく異なります。 2 つの異なるログイン ページが必要であり、ユーザー情報は異なる Cookie またはセッションに保存する必要があるため、ユーザー認証をアプリケーションに追加する必要があります
2.yii ユーザー認証:
#。 ##ユーザー検証をカスタマイズする前に、まず yii の検証および認可メソッドを理解する必要があります。ユーザーを検証するには、検証ロジックを備えた検証クラスを定義する必要があります。 yii IUserIdentity インターフェースでは、異なるクラスが異なる検証メソッドを実装できます。通常、Yii はユーザー名とパスワードを検証するために使用される CUserIdentity クラスを、継承後に書き換える必要があります。 Authenticate() メソッドを使用して独自の
検証メソッドを実装します。具体的なコードは次のとおりです。
Php code
class UserIdentity extends CUserIdentity { private $_id; public function authenticate() { $record=User::model()->findByAttributes(array('username'=>$this->username)); if($record===null) $this->errorCode=self::ERROR_USERNAME_INVALID; else if($record->password!==md5($this->password)) $this->errorCode=self::ERROR_PASSWORD_INVALID; else { $this->_id=$record->id; $this->setState('title', $record->title); $this->errorCode=self::ERROR_NONE; } return !$this->errorCode; } public function getId() { return $this->_id; } }
ユーザーがログインすると、次のコードが呼び出されます。 :
// 使用提供的用户名和密码登录用户 $identity=new UserIdentity($username,$password); if($identity->authenticate()) Yii::app()->user->login($identity); else echo $identity->errorMessage;
ユーザーが終了すると、次のコードが呼び出されます:
Php コード
// 注销当前用户 Yii::app()->user->logout(); 其中的user是yii的一个components.需要在protected/config/main.php中定义Php コード
'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, 'loginUrl' => array('site/login'), ),Yii では、user はデフォルトで CWebUser クラスのインスタンスであるため、ここではユーザーのログイン検証を実装しました。ただし、ユーザーがログインしているかどうかに関係なく、ユーザーのすべてのアクションにアクセスできるようになりました。次のステップは、ユーザーのアクセスを許可することです。アクセス制御フィルターを見てみましょう。アクセス制御を備えた単純なコントローラー:
Php コード
class AdminDefaultController extends CController { public function filters() { return array('accessControl'); } public function accessRules() { return array( array( 'allow', 'users' => array('@'), ), array( 'deny', 'users' => array('*') ), ); } }
Php コードpublic function filterAccessControl($filterChain)
{
$filter=new CAccessControlFilter;
$filter->setRules($this->accessRules());
$filter->filter($filterChain);
}
内部に新しい CAccessControlFilter インスタンスを作成し、setRules.$ のときに accessRules() メソッドによって返されるパラメータを渡します。 filter->filter($filterChain) その後、他のフィルターの呼び出しを続けます。
そして、すべての特定の承認ルールは、accessRules:
Php codepublic function accessRules()
{
return array(
array('deny',
'actions'=>array('create', 'edit'),
'users'=>array('?'),
),
array('allow',
'actions'=>array('delete'),
'roles'=>array('admin'),
),
array('deny',
'actions'=>array('delete'),
'users'=>array('*'),
),
);
}
で定義されます。特定のルールについては、yii マニュアルを参照してください。
3. 新しい検証システムを追加します:
最初に、CWebUser:
Php コードから CAdminUser を継承します。 class CAdminWebUser extends CWebUser
{
public $loginUrl = array('admin/admin/login');
}
これはコンポーネントに配置されます
Php コードのコンポーネント セクションを渡します'user'=>array(
// enable cookie-based authentication
'class' => 'CAdminUser',
'allowAutoLogin'=>true,
'loginUrl' => array('site/login'),
),
モジュール内にある場合は、モジュール クラスの init メソッドに次のコードを追加します。
Php コード$this->setComponents(array(
'adminUser' => array(
'class' => 'CAdminWebUser',
'allowAutoLogin' => false,
)
));
最終呼び出しメソッド
Php コード//全局应用
Yii::app()->getComponent('adminUser');
//在模块中
Yii::app()->controller->module->getComponent('adminUser');
しかし、これだけでは不十分です。別のユーザーの検証と承認を実装するには、コントローラーのフィルターも変更する必要があります。 #最初のステップはフィルターをカスタマイズすることです:
class CAdminAccessControlFilter extends CAccessControlFilter { protected function preFilter($filterChain) { $app=Yii::app(); $request=$app->getRequest(); $user = Yii::app()->controller->module->getComponent('adminUser'); $verb=$request->getRequestType(); $ip=$request->getUserHostAddress(); foreach($this->getRules() as $rule) { if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed break; else if($allow<0) // denied { $this->accessDenied($user); return false; } } return true; } }
public function filterAccessControl($filterChain) { $filter = new CAdminAccessControlFilter(); $filter->setRules($this->accessRules()); $filter->filter($filterChain); } //在这里我们使用自定义的filter类替换了原来的filter
OK、このコントローラーの accessRules() で adminUser の承認を指定できます。
上記はこの記事の全内容です。その他の関連コンテンツについては、この記事が役立つことを願っています。 、PHP 中国語 Web サイトに注意してください。
関連する推奨事項:
PHP の Yii フレームワークでのログイン機能の実装について
yii2 の変更方法.0 ユーザー ログインに使用されるユーザー テーブルは別のテーブルです
以上がyii で新しいユーザー認証を追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。