yii2用户认证机制

jianfly.com 2019-01-31 1897次浏览

/config/web.php中配置

‘user’ => [ //前台用户
‘identityClass’ => 'app\odels\User', //model类
'enableAutoLogin' => true, //自动登录
'idParam' => '__user', //session中id的键
'identityCookie' => [ 'name' => '__user_identity', 'httpOnly' => true ], //cookie中键的配置
'loginUrl' => ['/member/auth'], //前台登录地址
],
'admin' => [ //后台用户
‘class’ => 'yii\web\User', //使用user类
‘identityClass’ => 'app\modules\models\Admin', //需要验证的model类
'idParam'=> '__admin', //session中id的键
'identityCookie' =>['name' => '__admin_identity', 'httpOnly' => true],//cookie中id的键
'enableAtoLogin' => true, //允许自动登录
'loginUrl' => ['/admin/public/login'],//登录地址
],

model类中继承并实现5个接口

class User ActiveRecord implements \yii\wb\IdentityInterface 
{
public static function findIdentity( $id ) {
return static::findOne($id);
}
public static functionfindIdentityByAccessToken ($token, $type = null ) {
return null;
}
public function getId() {
return $this->userid;
}
public function getAuthKey() {
return '';
}
public function validateAuthKey( $authKey ) {
return true;
}
public function login($data) { //登录
$this->scenario = "login";
if($this->load($data) && $this->validate()) {
//登录
return Yii::$app->user->login($this->getUser(), $this->rememberMe?24*3600:0);
}
return false;
}
public function getUser() { //获取用户信息
return self::find()->where('username = :loginname or useremail = :loginname', [':loginname' => $this->loginname])->one();
}
}

Controller中登录

if(Yii::$app->request->isPost) {
$post = Yii::$app->request->post();
if($model->login($post)) {
//登录成功
}
}

Controller中登出

Yii::$app->user->logout(false); //这里传false只清空前台用户的session

View中获取用户信息

\Yii::$app->isGuest  //未登录状态
\Yii::$app->user->identity->username  //用户名

行为behaviors

class CommonController extends Controller 
{
protected $actions = ['*']; //access验证的所有方法
protected $except = [];
protected $mustlogin= [];
protectd $verbs = []; //用于验证允许post/get等请求访问

public function behaviors()
{
return [
'access' => [
'class' => \yii\filters\AccessControl::className(), //获取className
‘only’ => $this->actions, //需要验证的方法
‘except’ => $this->except, //不需要验证的方法
‘rules’ => [ //规则
[
'allow' => false; //不允许访问
‘actions’ => empty($this->mustlogin) ? [] : $this->mustlogin, //需要验证的方法
‘roles’ => ['?'], //guest
],
[
'allow' => true, //允许访问
'actions' => empty($this->mustlogin) ? [] : $this->mustlogin, //需要验证的方法
'roles' => ['@'], //登录了的
],
],
],
‘verbs’ => [
'class' => \yii\filters\VerbFilter::className(),
'actions' => $this->verbs,
],
];
}
}
class OrderController extends CommonController {
potected $mustlogin = ['index', 'check', 'add', 'confirm', 'pay', 'getExpress', 'received']; //这些方法需要登录后访问
potected $verbs = [
'confirm' => ['post'], //confirm只允许post访问
]
}

密码机制

$this->userpass = Yii::$app->getSecurity()->generatePasswordHash($this->userpass); //生成密码
YII::$app->getSecurity()->validatePassword($this->userpass, $data->userpass); //验证密码