Yii 2.0ログイン機能コード実装
11091 ワード
yiiアーカイブファイルのbasicアプリケーションにはログイン機能があります.user関連を参照してください.同時にbasicには基本ログインLoginテンプレートが付いています.
一、コントロール/アクションの確立
ここではSiteControllerのactionLoginメソッドを使用します.
使用するbasicのデフォルトsiteController
アクションもデフォルトです.
二、ModelとLoginForm
LoginFormのデフォルトloginメソッドでは、yii/app/webの下でsessionとcookieにuser情報を返す必要があります.記録された情報は$this->getUser()で返されるstaticクラスで、以下のようになります.
static($currentUser)は、現在作成されているクラスです.属性は次のとおりです.
三、yii登録の基本原理
1、パラメータを構成し、user拡張を加える必要がある
identityClassとは、userを処理するためのmodelであり、Yii 2の高度テンプレートが持参したuserを使用してもよいし、自分で書くこともでき、IdentityInterfaceインタフェースを実現する必要がある(ここではuserInfoと書いてgiiのcrudを利用して生成)
2、userについて
userを構成したら、Yii::$app->userアクセスをグローバルに使用できます.userの重要な属性、isGuest:ユーザーがログインしているかどうかを判断する;id、ログインユーザーの唯一の識別識別標識を保存し、私たち自身が設定し、具体的にどのように設定するか、そして後文の分解を見る.userの重要な方法、login():ユーザー情報をsession、cookieに保存する.logout():セッション、クッキーからユーザー情報を破棄する.Note that User only maintains the user authentication status.It does NOT handle how to authenticate a user.The logic of how to authenticate a user should be done in the class implementing yiiwebIdentityInterface.//userコンポーネントの作業は、ユーザーの認証状態(すなわち、簡単な操作sessionとcookie)を維持することだけです.ユーザーの認証には責任を負いません.認証プロセスの論理実装はすべてIdentityInterfaceインタフェースを実装したクラスによって実現される.
3、IdentityInterface
このインタフェースは5つの関数を定義しています:findIdentity()getId(); findIdentityByAccessToken(); getAuthKey(); validateAuthKey; この5つの関数の中で、最も重要なのはgetid()かもしれません.この関数はあなたが実現し、userに渡されたオブジェクトがlogin時に呼び出され、userのid属性値を設定します!したがって、この関数を実装するときに何を返すのか、userコンポーネントが覚えているuser idは何なのか.その他のいくつかの関数の具体的な実装は、ドキュメントを参照してください.
4、ログイン
ユーザログイン情報を保存したデータテーブルに対応するUserというARモデルクラス(アプリケーションコンポーネントuserの違いに注意)を定義したとします.ユーザー認証を完了するためにUserを使用する場合は、上記のIdentityInterfaceを実装する必要があります.1、サーバーはユーザーに提出されたユーザー名とパスワードを受け入れる;2、Userインスタンス$modelを生成する;3、賦課値:
自動ログインを実現するには、パラメータ
四、出会った問題
modelにはデータベース属性があります.ここではログイン属性を記録します.両者の名前が異なる必要があります.そうしないと、ユーザーの追加に影響します.
一、コントロール/アクションの確立
ここではSiteControllerのactionLoginメソッドを使用します.
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\Userinfo;
use app\models\ContactForm;
use app\models\EntryForm;
class SiteController extends Controller {
使用するbasicのデフォルトsiteController
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('login', [
'model' => $model,
]);
}
アクションもデフォルトです.
二、ModelとLoginForm
public function login() {
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
}
return false;
}
public function getUser() {
if ($this->_user === false) {
$this->_user = Userinfo::validateUsername($this->username, $this->password);
}
return $this->_user;
}
LoginFormのデフォルトloginメソッドでは、yii/app/webの下でsessionとcookieにuser情報を返す必要があります.記録された情報は$this->getUser()で返されるstaticクラスで、以下のようになります.
public static function validateUsername($username, $password) {
try {
$records = Yii::$app->db->createCommand("select * from userinfo where username = '".$username."'")->queryAll();
} catch (Exception $e) {
var_dump($e);
}
if ($records && $records[0]["password"] == $password) {
$currentUser = [
'usernameL' => $records[0]["username"],
'passwordL' => $records[0]["password"],
'emailAddressL' => $records[0]["emailAddress"],
'authKey' => 'test100key',
'accessToken' => '100-token',
];
return new static($currentUser);
}
return null;
}
static($currentUser)は、現在作成されているクラスです.属性は次のとおりです.
class Userinfo extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface {
public $usernameL;
public $passwordL;
public $emailAddressL;
public $authKey;
public $accessToken;
三、yii登録の基本原理
1、パラメータを構成し、user拡張を加える必要がある
'components' => [
'user' => [
'identityClass' => 'app\models\Userinfo',
'enableAutoLogin' => true,
],
...
]
identityClassとは、userを処理するためのmodelであり、Yii 2の高度テンプレートが持参したuserを使用してもよいし、自分で書くこともでき、IdentityInterfaceインタフェースを実現する必要がある(ここではuserInfoと書いてgiiのcrudを利用して生成)
2、userについて
userを構成したら、Yii::$app->userアクセスをグローバルに使用できます.userの重要な属性、isGuest:ユーザーがログインしているかどうかを判断する;id、ログインユーザーの唯一の識別識別標識を保存し、私たち自身が設定し、具体的にどのように設定するか、そして後文の分解を見る.userの重要な方法、login():ユーザー情報をsession、cookieに保存する.logout():セッション、クッキーからユーザー情報を破棄する.Note that User only maintains the user authentication status.It does NOT handle how to authenticate a user.The logic of how to authenticate a user should be done in the class implementing yiiwebIdentityInterface.//userコンポーネントの作業は、ユーザーの認証状態(すなわち、簡単な操作sessionとcookie)を維持することだけです.ユーザーの認証には責任を負いません.認証プロセスの論理実装はすべてIdentityInterfaceインタフェースを実装したクラスによって実現される.
3、IdentityInterface
このインタフェースは5つの関数を定義しています:findIdentity()getId(); findIdentityByAccessToken(); getAuthKey(); validateAuthKey; この5つの関数の中で、最も重要なのはgetid()かもしれません.この関数はあなたが実現し、userに渡されたオブジェクトがlogin時に呼び出され、userのid属性値を設定します!したがって、この関数を実装するときに何を返すのか、userコンポーネントが覚えているuser idは何なのか.その他のいくつかの関数の具体的な実装は、ドキュメントを参照してください.
4、ログイン
ユーザログイン情報を保存したデータテーブルに対応するUserというARモデルクラス(アプリケーションコンポーネントuserの違いに注意)を定義したとします.ユーザー認証を完了するためにUserを使用する場合は、上記のIdentityInterfaceを実装する必要があります.1、サーバーはユーザーに提出されたユーザー名とパスワードを受け入れる;2、Userインスタンス$modelを生成する;3、賦課値:
$model->load(Yii::$app->request->post());
4、ユーザー入力の検査及びユーザー名とパスワードの検証:$model->validate();
5、登録Yii::$app->user->login($model,$duration);
5、自動ログイン自動ログインを実現するには、パラメータ
$enableAutoLogin
を設定する必要があります.$duration
はゼロより大きくなければならない.$isGuest
を使用して、ユーザがログインしたか否かを判断する.四、出会った問題
class Userinfo extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface {
public $usernameL;
public $passwordL;
public $emailAddressL;
public $authKey;
public $accessToken;
modelにはデータベース属性があります.ここではログイン属性を記録します.両者の名前が異なる必要があります.そうしないと、ユーザーの追加に影響します.