Yii - प्रमाणीकरण
उपयोगकर्ता की पहचान की पुष्टि करने की प्रक्रिया को कहा जाता है authentication। यह आमतौर पर एक उपयोगकर्ता नाम और एक पासवर्ड का उपयोग करता है यह निर्धारित करने के लिए कि क्या उपयोगकर्ता वह है जो वह दावा करता है।
Yii प्रमाणीकरण ढांचे का उपयोग करने के लिए, आपको निम्न की आवश्यकता है -
- उपयोगकर्ता एप्लिकेशन घटक को कॉन्फ़िगर करें।
- Yii \ web \ IdentityInterface इंटरफ़ेस लागू करें।
मूल एप्लिकेशन टेम्पलेट अंतर्निहित प्रमाणीकरण प्रणाली के साथ आता है। यह निम्न कोड में दिखाए अनुसार उपयोगकर्ता एप्लिकेशन घटक का उपयोग करता है -
<?php
$params = require(__DIR__ . '/params.php'); $config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this
//is required by cookie validation
'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
//other components...
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config;
?>
उपर्युक्त कॉन्फ़िगरेशन में, उपयोगकर्ता के लिए पहचान वर्ग को एप्लिकेशन \ मॉडल \ उपयोगकर्ता होने के लिए कॉन्फ़िगर किया गया है।
पहचान वर्ग को लागू करना होगा yii\web\IdentityInterface निम्नलिखित विधियों के साथ -
findIdentity() - निर्दिष्ट उपयोगकर्ता आईडी का उपयोग करके पहचान वर्ग के एक उदाहरण के लिए दिखता है।
findIdentityByAccessToken() - निर्दिष्ट पहुँच टोकन का उपयोग करके पहचान वर्ग के उदाहरण के लिए दिखता है।
getId() - यह उपयोगकर्ता की आईडी लौटाता है।
getAuthKey() - कुकी-आधारित लॉगिन को सत्यापित करने के लिए उपयोग की जाने वाली कुंजी देता है।
validateAuthKey() - कुकी-आधारित लॉगिन कुंजी को सत्यापित करने के लिए तर्क को लागू करता है।
मूल एप्लिकेशन टेम्पलेट से उपयोगकर्ता मॉडल उपरोक्त सभी कार्यों को लागू करता है। उपयोगकर्ता डेटा में संग्रहीत किया जाता है$users संपत्ति -
<?php
namespace app\models;
class User extends \yii\base\Object implements \yii\web\IdentityInterface {
public $id;
public $username; public $password;
public $authKey; public $accessToken;
private static $users = [ '100' => [ 'id' => '100', 'username' => 'admin', 'password' => 'admin', 'authKey' => 'test100key', 'accessToken' => '100-token', ], '101' => [ 'id' => '101', 'username' => 'demo', 'password' => 'demo', 'authKey' => 'test101key', 'accessToken' => '101-token', ], ]; /** * @inheritdoc */ public static function findIdentity($id) {
return isset(self::$users[$id]) ? new static(self::$users[$id]) : null;
}
/**
* @inheritdoc
*/
public static function findIdentityByAccessToken($token, $type = null) {
foreach (self::$users as $user) {
if ($user['accessToken'] === $token) {
return new static($user); } } return null; } /** * Finds user by username * * @param string $username
* @return static|null
*/
public static function findByUsername($username) { foreach (self::$users as $user) { if (strcasecmp($user['username'], $username) === 0) { return new static($user);
}
}
return null;
}
/**
* @inheritdoc
*/
public function getId() {
return $this->id; } /** * @inheritdoc */ public function getAuthKey() { return $this->authKey;
}
/**
* @inheritdoc
*/
public function validateAuthKey($authKey) { return $this->authKey === $authKey; } /** * Validates password * * @param string $password password to validate
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password) { return $this->password === $password;
}
}
?>
Step 1 - URL पर जाएं http://localhost:8080/index.php?r=site/login और लॉगिन और पासवर्ड के लिए व्यवस्थापक का उपयोग करके वेब साइट में लॉग इन करें।
Step 2 - फिर, एक नया फ़ंक्शन जोड़ें actionAuth() SiteController के लिए।
public function actionAuth(){
// the current user identity. Null if the user is not authenticated.
$identity = Yii::$app->user->identity; var_dump($identity);
// the ID of the current user. Null if the user not authenticated.
$id = Yii::$app->user->id;
var_dump($id); // whether the current user is a guest (not authenticated) $isGuest = Yii::$app->user->isGuest; var_dump($isGuest);
}
Step 3 - पता टाइप करें http://localhost:8080/index.php?r=site/auth वेब ब्राउज़र में, आप के बारे में विस्तृत जानकारी देखेंगे admin उपयोगकर्ता।
Step 4 - लॉगिन और लॉग इन करने के लिए, टा उपयोगकर्ता आप निम्नलिखित कोड का उपयोग कर सकते हैं।
public function actionAuth() {
// whether the current user is a guest (not authenticated)
var_dump(Yii::$app->user->isGuest); // find a user identity with the specified username. // note that you may want to check the password if needed $identity = User::findByUsername("admin");
// logs in the user
Yii::$app->user->login($identity);
// whether the current user is a guest (not authenticated)
var_dump(Yii::$app->user->isGuest); Yii::$app->user->logout();
// whether the current user is a guest (not authenticated)
var_dump(Yii::$app->user->isGuest);
}
सबसे पहले, हम जांचते हैं कि क्या कोई उपयोगकर्ता लॉग इन है। यदि मान वापस आता है false, तो हम के माध्यम से एक उपयोगकर्ता में लॉग इन करें Yii::$app → user → login() कॉल करें, और उसका उपयोग करके लॉग आउट करें Yii::$app → user → logout() तरीका।
Step 5 - URL पर जाएं http://localhost:8080/index.php?r=site/auth, आप निम्नलिखित देखेंगे।
yii\web\User कक्षा निम्नलिखित घटनाओं को बढ़ाती है -
EVENT_BEFORE_LOGIN- yii \ web \ उपयोगकर्ता की शुरुआत में उठाया गया :: लॉगिन ()
EVENT_AFTER_LOGIN - एक सफल लॉगिन के बाद उठाया
EVENT_BEFORE_LOGOUT- yii \ web \ उपयोगकर्ता की शुरुआत में उठाया गया :: लॉगआउट ()
EVENT_AFTER_LOGOUT - एक सफल लॉगआउट के बाद उठाया