찾다
PHP 프레임워크YIIyii에 로그인하는 방법

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에서 수정되었습니다. 여기에서 다음 코드에 주의하세요.

코드 번호 ①은 규칙 규칙입니다. 데이터를 채우고 채워진 데이터가 올바른지, 형식을 준수하는지 등을 확인합니다. 열 중 하나는 비밀번호이고 해당 규칙은 현재 클래스의 verifyPassword() 메소드입니다. 아래의 User 클래스에 해당하는 메소드와 구별되도록 주의하시기 바랍니다. 코드

②는 User 클래스에서 findByUsername 메서드를 호출합니다. 이 User 클래스는 주로 현재 LoginForm 데이터와 비교할 AR 클래스 인스턴스를 반환하기 위해 아래에 작성됩니다.

3 코드에 대해서는 지금은 여기서 언급하지 않겠습니다. 나중에 쿠키 로그인에 관해 이야기할 때 언급하겠습니다.

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 클래스만 상속하면 됩니다. 하지만 우리 모델의 핵심은 검증이기 때문에 실제 검증은 LoginForm 모델에서 언급한 verifyPassword 처럼 구현하는 것이 당연합니다. 로직은 현재 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에서 설명하지 않습니다.

3getId: 현재 AR 클래스에 해당하는 id를 반환

④getAuthKey: 현재 AR 클래스에 해당하는 auth_key를 반환

⑤validateAuthKey: 이 메서드 가 더 중요합니다. 이는 나중에 이야기할 쿠키 로그인 확인의 핵심입니다.

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에 있습니다. code 에서 이 메서드를 인용하면 사용자가 제출한 사용자 이름을 기반으로 데이터 테이블의 사용자 이름과 동일한 데이터 항목, 즉 AR 인스턴스를 반환하는 것이 목적입니다.

②validatePassword(): 여기서는 사용자가 제출한 비밀번호와 현재 AR 수업의 비밀번호를 비교합니다.

3generateAuthKey(): 쿠키 로그인을 위한 임의의 auth_key를 생성합니다.

총 두 개의 모델 클래스인 LoginForm과 User가 작성되었습니다. 하나는 사용자가 제출한 데이터를 받는 데 사용되고 다른 하나는 데이터베이스에서 데이터를 얻는 데 사용됩니다.

Controller(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-> 현재 사용자 모드가 게스트 모드, 즉 로그인되어 있지 않은지 여부를 결정합니다. 사용자가 로그인되어 있으면 현재 로그인된 사용자의 정보가 user 클래스에 저장됩니다.

②현재 방문자인 경우 LoginForm 모델이 먼저 인스턴스화됩니다.

3이 코드 줄은 전체 로그인 방법의 핵심입니다. 먼저 $model-> load( Yii::$app->request->post())는 게시물 데이터를 $model, 즉 LoginForm 모델에 채웁니다. true가 반환되면 채우기가 성공한 것입니다. 다음: $model->login(): LoginForm 클래스에서 login() 메서드를 실행합니다. login() 메서드에서 일련의 확인이 수행되는 것을 볼 수 있습니다.

View(View)

모델과 컨트롤러를 구현한 후 다음 단계는 뷰 부분입니다. 사용자가 데이터를 입력해야 하기 때문에 폼을 제공해야 합니다. Yii2에서는 양식을 빠르게 생성할 수 있도록 ActiveForm을 제공하며, 코드는 다음과 같습니다.

<?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>

추천 학습: yiiframework

위 내용은 yii에 로그인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
YII : 고성능 PHP 프레임 워크 소개YII : 고성능 PHP 프레임 워크 소개Apr 18, 2025 am 12:03 AM

YII는 웹 애플리케이션의 빠른 개발에 적합한 고성능 PHP 프레임 워크입니다. 핵심 개념에는 다음이 포함됩니다. 구성 요소 기반 설계 : YII는 풍부한 구성 요소와 확장을 제공하고 자동 코드 생성을 지원하며 개발 효율성을 향상시킵니다. MVC 아키텍처 : 운영 효율성을 향상시키기 위해 "컨벤션은 구성보다 낫다"라는 설계 개념을 채택합니다. 캐시 및 데이터베이스 지원 : 강력한 캐싱 메커니즘 및 데이터베이스 작업을 제공하여 응용 프로그램 성능을 최적화합니다.

YII의 지속적인 사용 : 현재 상태 검사YII의 지속적인 사용 : 현재 상태 검사Apr 17, 2025 am 12:09 AM

YII는 여전히 현대 개발에서 경쟁력이 있습니다. 1) 고성능 : 게으른 하중 및 캐싱 메커니즘을 채택합니다. 2) 보안 : 내장 CSRF 및 SQL 주입 보호. 3) 확장 성 : 구성 요소 기반 설계는 확장 및 사용자 정의가 쉽습니다.

YII의 커뮤니티 : 지원 및 자원YII의 커뮤니티 : 지원 및 자원Apr 16, 2025 am 12:04 AM

YII 커뮤니티는 풍부한 지원과 자원을 제공합니다. 1. 공식 웹 사이트와 Github를 방문하여 문서와 코드를 얻으십시오. 2. 공식 포럼 및 StackoverFlow를 사용하여 기술적 인 문제를 해결하십시오. 3. Githubissues를 통해 버그를보고하고 제안을하십시오. 4. 문서와 튜토리얼을 사용하여 YII 프레임 워크를 배우십시오.

YII : 웹 개발을위한 강력한 프레임 워크YII : 웹 개발을위한 강력한 프레임 워크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를 기반으로 한 고성능 프레임 워크이며 웹 애플리케이션의 빠른 개발에 적합합니다. 1) 개발 프로세스를 단순화하기 위해 MVC 아키텍처 및 구성 요소 설계를 채택합니다. 2) YII는 높은 동시성 및 확장을 지원하는 ActiveRecord, Restfulapi 등과 같은 풍부한 기능을 제공합니다. 3) GII 도구를 사용하면 CRUD 코드를 신속하게 생성하고 개발 효율성을 향상시킬 수 있습니다. 4) 디버깅 중에 구성 파일을 확인하고 디버깅 도구를 사용하고 로그를 볼 수 있습니다. 5) 성능 최적화 제안에는 캐시 사용, 데이터베이스 쿼리 최적화 및 코드 가독성 유지가 포함됩니다.

YII의 현재 상태 : 그 인기를 살펴보십시오.YII의 현재 상태 : 그 인기를 살펴보십시오.Apr 13, 2025 am 12:19 AM

yiiremainspopularbullessfavoredthanlaravel.

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) 캐시 및 데이터베이스 쿼리 최적화를 사용하여 성능을 향상시킵니다.

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 Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구