検索

yii へのログイン方法

Dec 31, 2019 pm 02:56 PM
yii

yii へのログイン方法

yii ログイン方法の例:

1. LoginForm.php

ユーザー ログイン モジュール、送信されるのはユーザー名とパスワードであるため、ユーザーが送信したデータを特別に処理するためのモデルを最初に作成する必要があるため、まず新しい LoginForm.php を作成します。コードは次のとおりです:

<?php
 
namespace app\modules\backend\models;
 
use Yii;
use yii\base\Model;
 
/**
 * LoginForm is the model behind the login form.
 */
class LoginForm extends Model
{
    public $username;
    public $password;
    public $rememberMe = true;
 
    private $_user = false;
 
 
    /**
     * @return array the validation rules.
     */
    public function rules()<span style="white-space:pre">		</span>//①
    {
        return [
            // username and password are both required
            [[&#39;username&#39;, &#39;password&#39;], &#39;required&#39;,&#39;message&#39;=>""],
            // rememberMe must be a boolean value
            [&#39;rememberMe&#39;, &#39;boolean&#39;],
            // password is validated by validatePassword()
            [&#39;password&#39;, &#39;validatePassword&#39;],
        ];
    }
 
    /**
     * Validates the password.
     * This method serves as the inline validation for password.
     *
     * @param string $attribute the attribute currently being validated
     * @param array $params the additional name-value pairs given in the rule
     */
    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();
 
            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, &#39;Incorrect username or password.&#39;);
            }
        }
    }
 
    /**
     * Logs in a user using the provided username and password.
     * @return boolean whether the user is logged in successfully
     */
    public function login()
    {
        if ($this->validate()) {
            if($this->rememberMe)
            {
                $this->_user->generateAuthKey();//③
            }
            return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
        }
        return false;
    }
 
    /**
     * Finds user by [[username]]
     *
     * @return User|null
     */
    public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByUsername($this->username); //②
        }
 
        return $this->_user;
    }
}

このモデルは、基本的なログイン フォームに付属する LoginForm に基づいて変更されます。テンプレートのほとんどのコードには次のコードがあることに注意してください:

コード番号①はルール ルールです。ルール ルールは、入力されたデータのルールを定義します。入力されたデータが正しいかどうかを確認します。は空で形式に準拠しています。そのうちの 1 つは列がパスワードで、対応するルールは validatePassword です。これにより、現在のクラスの validatePassword() メソッドが自動的に呼び出されます。User クラスに対応するメソッドとの区別に注意してください。下に。コード

② は、User クラスの findByUsername メソッドを呼び出します。この User クラスは、主に現在の LoginForm データと比較するための AR クラス インスタンスを返すために以下に記述されます。コード番号

③ については、ここではここでは触れませんが、後ほど Cookie ログインについて説明するときに説明します。

2. User.php

(1) ActiveRecord クラス

LoginForm を完了した後、まだ何かが不足しています。ユーザーからデータを受け取った後も、まだ必要なものがあります。ユーザーからデータを受け取ります。データベースは比較のために対応するデータを取り出します。そのため、次に完成させる必要があるのは、データベースから取得したデータのクラス、AR クラス、完全名は ActiveRecord、アクティブ レコード クラスです。 , これはデータを見つけるのに便利です。クラス名とデータ テーブルが一致している限り、テーブル名が同じであれば、このデータ テーブルからデータを取得できます。たとえば:

<?php
namespace app\modules\backend\models;
use yii\db\ActiveRecord;
 
class User extends ActiveRecord{       } ?>

ということもできます。返されたテーブル名を自分で追加し、このクラスの次のメソッドをオーバーライドするだけです。

public static function tableName(){
		return &#39;user&#39;;
	}

(2) IdentityInterface インターフェイス

一般に、データベースからデータを検索するには、 AR クラスですが、私たちのものはユーザー ログイン モデルであり、コアは検証であるため、コアの Verification 関数を実装するのは自然であり、LoginForm モデルで言及されている validatePassword と同様に、実際の検証ロジックは現在の User モデルで完成します。一般に、IdentityInterface インターフェイスを実装するには、次のメソッドを実装する必要があります。

    public static function findIdentity($id);  //①
 
    public static function findIdentityByAccessToken($token, $type = null);   //②
 
    public function getId();    //③
 
    public function getAuthKey();   //④
 
    public function validateAuthKey($authKey);    //⑤

①findIdentity: id

②findIdentityByAccessToken に基づいてデータ テーブルに対応するデータを検索します。 AccessToken (前述) データに基づいて対応するデータを見つけます。AccessToken データ テーブルにもこのフィールドがありますが、これは何に使用されるのでしょうか?実際、AccessToken は現在のユーザー ログイン モデルではあまり役に立ちません。リセットフル ログインの検証に特に使用されます。詳細は Baidu で確認できます。ここでは説明しません。

③getId: 現在の AR クラスに対応する ID を返します。

④getAuthKey: 現在の AR クラスに対応する auth_key を返します。

⑤validateAuthKey: このメソッドはより重要です。後ほど説明します Cookie ログイン検証の核心に到達します。

User.php にインターフェイスを実装し、上記のメソッドを書き換えます。完全な User.php コードは次のとおりです:

$token]);
	}
 
	public static function findByUsername($username){     //①
		return static::findOne(['username'=>$username]); 
	}
 
	public function getId(){
		return $this->id;
	}
 
	public function getAuthkey(){
		return $this->auth_key;
	}
 
	public function validateAuthKey($authKey){
		return $this->auth_key === $authKey;
	}
 
	public function validatePassword($password){          //②
		return $this->password === md5($password);
	}
 
   	 /**
    	 * Generates "remember me" authentication key
    	 */
        public function generateAuthKey()                    //③
        {
       		$this->auth_key = \Yii::$app->security->generateRandomString();
       		$this->save();
        }
 
}
?>

①findByUsername(): LoginForm コードでは、これは次のとおりです。 quote メソッドの目的は、ユーザーが送信したユーザー名に基づいて、データ テーブル内のユーザー名と同じデータ項目、つまり AR インスタンスを返すことです。

②validatePassword(): ここでは、ユーザーが送信したパスワードが現在の AR クラスのパスワードと比較されます。

③generateAuthKey(): Cookie ログイン用のランダムな auth_key を生成します。

LoginForm と User の合計 2 つの Model クラスが作成されました。1 つはユーザーが送信したデータを受信するために使用され、もう 1 つはデータベースからデータを取得するために使用されます。

Controller (コントローラー)

Controller は主にデータ送信に使用され、ユーザーが送信したデータを対応するモデル (Model) に入力し、さらにレンダリングします。モデルから返された情報に基づいてビュー (View) を作成するか、他のロジックを実行します。

ここで、コントローラーに LoginController.php という名前を付けます。完全な実装コードは次のとおりです:

<?php
 
namespace app\controllers;
 
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
 
class SiteController extends Controller
{
    public function actionIndex()
    {
        return $this->render(&#39;index&#39;);
    }
 
    public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {     //①
            return $this->goHome();
        }
 
        $model = new LoginForm();             //②
        if ($model->load(Yii::$app->request->post()) && $model->login()) {      //③
            return $this->goBack();          //④
        }
        return $this->render(&#39;login&#39;, [      //⑤
            &#39;model&#39; => $model,
        ]);
    }
 
    public function actionLogout()
    {
        Yii::$app->user->logout();
 
        return $this->goHome();
    }
}

① まず、 \Yii::$app->user->isGuest から、現在はゲスト モード、つまりログインしていません。ユーザーがログインしている場合、現在ログインしているユーザーの情報がユーザー クラスに格納されます。

②あなたが現在訪問者の場合、最初に LoginForm モデルがインスタンス化されます。

③このコード行は、ログイン メソッド全体の中核です。最初: $model->load(Yii: :$ app->request->post()) は、投稿データを $model (LoginForm モデル) に入力します。true が返されれば、入力は成功です。次: $model->login(): LoginForm クラスの login() メソッドを実行します。login() メソッドから、一連の検証が実行されることがわかります。

View(View)

モデルとコントローラーを実装したら、次はビュー部分ですが、ユーザーがデータを入力する必要があるため、フォームを用意する必要があります。クイック フォームを生成します。コードは次のとおりです:

<?php
 
/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model app\models\LoginForm */
 
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
 
$this->title = &#39;Login&#39;;
$this->params[&#39;breadcrumbs&#39;][] = $this->title;
?>
<div class="site-login">
    <h1><?= Html::encode($this->title) ?></h1>
    <p>Please fill out the following fields to login:</p>
    <?php $form = ActiveForm::begin([
        &#39;id&#39; => &#39;login-form&#39;,
        &#39;options&#39; => [&#39;class&#39; => &#39;form-horizontal&#39;],
        &#39;fieldConfig&#39; => [
            &#39;template&#39; => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
            &#39;labelOptions&#39; => [&#39;class&#39; => &#39;col-lg-1 control-label&#39;],
        ],
    ]); ?>
        <?= $form->field($model, &#39;username&#39;)->textInput([&#39;autofocus&#39; => true]) ?>
        <?= $form->field($model, &#39;password&#39;)->passwordInput() ?>
        <?= $form->field($model, &#39;rememberMe&#39;)->checkbox([
            &#39;template&#39; => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>",
        ]) ?>
        <div class="form-group">
            <div class="col-lg-offset-1 col-lg-11">
                <?= Html::submitButton(&#39;Login&#39;, [&#39;class&#39; => &#39;btn btn-primary&#39;, &#39;name&#39; => &#39;login-button&#39;]) ?>
            </div>
        </div>
    <?php ActiveForm::end(); ?>
    <div class="col-lg-offset-1" style="color:#999;">
        You may login with <strong>admin/admin</strong> or <strong>demo/demo</strong>.<br>
        To modify the username/password, please check out the code <code>app\models\User::$users</code>.
    </div>
</div>

推奨学習: yii フレームワーク

以上がyii へのログイン方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Yiiの継続的な使用:現在のステータスを調べますYiiの継続的な使用:現在のステータスを調べますApr 17, 2025 am 12:09 AM

Yiiは、現代の開発で依然として競争力があります。 1)高性能:怠zyなロードとキャッシュメカニズムを採用します。 2)セキュリティ:内蔵CSRFおよびSQLインジェクション保護。 3)拡張性:コンポーネントベースの設計は、拡張とカスタマイズが簡単です。

Yiiのコミュニティ:サポートとリソースYiiのコミュニティ:サポートとリソースApr 16, 2025 am 12:04 AM

YIIコミュニティは、豊富なサポートとリソースを提供します。 1.公式ウェブサイトとGitHubにアクセスして、ドキュメントとコードを取得します。 2。公式フォーラムとStackoverflowを使用して、技術的な問題を解決します。 3.バグを報告し、githubissuesを通じて提案をします。 4.ドキュメントとチュートリアルを使用して、YIIフレームワークを学習します。

Yii:Web開発のための強力なフレームワークYii:Web開発のための強力なフレームワークApr 15, 2025 am 12:09 AM

YIIは、迅速な開発と効率的なコード生成のために設計された高性能PHPフレームワークです。そのコア機能には、MVCアーキテクチャ:YIIがMVCアーキテクチャを採用して、開発者がアプリケーションロジックを分離し、コードの維持と拡張を容易にするのを支援します。コンポーネント化とコード生成:コンポーネント化とコード生成を通じて、YIIは開発者の繰り返しの作業を削減し、開発効率を向上させます。パフォーマンスの最適化:YIIは、レイテンシロードとキャッシュテクノロジーを使用して、高負荷の下で効率的な動作を確保し、データベース操作を簡素化する強力なORM機能を提供します。

Yii:迅速な開発フレームワークYii:迅速な開発フレームワークApr 14, 2025 am 12:09 AM

YIIは、PHPに基づいた高性能フレームワークであり、Webアプリケーションの迅速な開発に適しています。 1)MVCアーキテクチャとコンポーネント設計を採用して、開発プロセスを簡素化します。 2)YIIは、ActivereCord、Restfulapiなどの豊富な機能を提供し、高い並行性と拡張をサポートします。 3)GIIツールを使用すると、CRUDコードを迅速に生成し、開発効率を向上させることができます。 4)デバッグ中に、構成ファイルを確認し、デバッグツールを使用してログを表示できます。 5)パフォーマンスの最適化の提案には、キャッシュの使用、データベースクエリの最適化、コードの読み取り可能性の維持が含まれます。

Yiiの現在の状態:その人気を見るYiiの現在の状態:その人気を見るApr 13, 2025 am 12:19 AM

yiiremainspopularbutislessfavoredthanlaravel、with14kgithubstars.itexcelsinperformanceandactiverecord、buthasasteeperndasmallerecosystem.it'sidealfordevelopersprioritizing -avisizing -avastecosystem。

YII:説明された重要な機能と利点YII:説明された重要な機能と利点Apr 12, 2025 am 12:15 AM

YIIは、そのコンポーネントアーキテクチャ、強力なORM、優れたセキュリティでユニークな高性能PHPフレームワークです。 1.コンポーネントベースのアーキテクチャにより、開発者は機能を柔軟に組み立てることができます。 2。強力なORMはデータ操作を簡素化します。 3.アプリケーションセキュリティを確保するための複数のセキュリティ関数を組み込み。

Yiiのアーキテクチャ:MVCなどYiiのアーキテクチャ:MVCなどApr 11, 2025 pm 02:41 PM

YIIフレームワークはMVCアーキテクチャを採用し、コンポーネント、モジュールなどを介して柔軟性とスケーラビリティを向上させます。1)MVCモードは、アプリケーションロジックをモデル、ビュー、コントローラーに分割します。 2)YIIのMVC実装では、アクション改良要求処理を使用します。 3)YIIはモジュール開発をサポートし、コードの組織と管理を改善します。 4)キャッシュとデータベースクエリの最適化を使用して、パフォーマンスを改善します。

YII 2.0ディープダイブ:パフォーマンスチューニングと最適化YII 2.0ディープダイブ:パフォーマンスチューニングと最適化Apr 10, 2025 am 09:43 AM

YII2.0アプリケーションのパフォーマンスを改善するための戦略には、次のものが含まれます。1。Databaseクエリ最適化、QueryBuilderおよびActiverCordを使用して特定のフィールドを選択し、結果セットを制限します。 2。キャッシュ戦略、データの合理的な使用、クエリ、ページキャッシュ。 3。コードレベルの最適化、オブジェクトの作成の削減、効率的なアルゴリズムの使用。これらの方法により、Yii2.0アプリケーションのパフォーマンスを大幅に改善できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター