Yii 2的登录页面提供了“记住密码”,这个功能最终是将相关信息保存在cookie中,从而实现自动登录的。
看LoginForm的代码,校验密码的代码是这样的:
public function login() |
红色那一行代码就是用来完成登录处理的,包括了最终完成记住密码的功能。这行代码有个细节需要注意,它是调用$app->user对象的login接口处理密码校验后的业务,但是接口的第一个参数,明显也是一个user,那么$app->user和$this->getUser(),这两个user有什么不同?
$app->user,是web\User,用来处理用户登录相关功能的,譬如实现记住密码、自动登录、自动跳转等功能,这些功能对于大多数系统来说都是需要的,因此放在框架里处理比较合适。
$this->getUser,是一个Model,由用户自定义,当然,Yii2也提供了默认的User Model,主要是用来处理与密码校验有关的业务,这些算法往往是由框架使用者自己确定的,因此被框架剥离出来。
最终根据将登录信息保存到cookie中,是在web\User->switchIdentity()完成的。