yii2用户认证机制
jianfly.com 2019-01-31 2202次浏览
/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); //验证密码