zoukankan      html  css  js  c++  java
  • yii自动登录

    在yii,登录页面选择记住密码,下次就会自动登陆

    前些天,自己增加了一个web应用,但是发现虽然选择记住密码,没选退出,关闭浏览器,重新进入还会跳转到登陆页面

    自动登录是利用cookie实现的

    配置User组件
      首先在配置文件的components中设置user组件

     'user' => [
                'identityClass' => 'appmodelsUser',
                'enableAutoLogin' => true,
                'idParam' => '__check',
                'identityCookie'=> ['name'=>'_check','httpOnly' => true],
        
            ],

    登陆

    vendoryiisoftyii2webUser.php的login中

    $this->switchIdentity($identity, $duration);

    先登录在调用switchIdentity方法,设置认证信息,在退出的时候也需要调用这个方法

    1. 设置session的有效期
    2. 如果cookie的有效期大于0并且允许自动登录,那么就把用户的认证信息保存到cookie中,调用sendIdentityCookie方法
    3. 如果允许自动登录,删除cookie信息。这个是用于退出的时候调用的。退出的时候传递进来的$identity为null

    sendIdentityCookie

    存储在cookie中的用户信息包含有三个值:

      • $identity->getId()
      • $identity->getAuthKey()
      • $duration

    getId()和getAuthKey()是在IdentityInterface接口中的。在设置User组件的时候,这个User Model是必须要实现IdentityInterface接口的。所以,可以在User Model中得到

    第三值就是cookie的有效期

    自动从cookie登录

    用户的认证信息已经存储到cookie中了,下次直接从cookie里面取信息然后设置就可以了

    Yii提供了AccessControl来判断用户是否登录,有了这个就不需要在每一个action里面再判断了

    public function behaviors()
    {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['logout'],
                    'rules' => [
                        [
                            'actions' => ['logout'],
                            'allow' => true,
                            'roles' => ['@'],
                        ],
                    ],
                ],
            ];
    }

    在AccessControl访问控制里面通过IsGuest属性来判断是否是认证用户,然后在getIsGuest方法里面是调用getIdentity来获取用户信息,如果为空就是游客(未登录),否则是认证用户。

    是认证用户,调用renewAuthStatus(),重新生成用户认证信息

    renewAuthStatus()先通过session来判断用户,因为用户登录后就已经存在于session中了。然后再判断如果是自动登录,那么就通过 loginByCookie()方法用cookie信息来登录。

    loginByCookie()先读取cookie值,然后$data = json_decode($value, true);反序列化为数组。

    要想实现自动登录,这三个值都必须有值。在User Model中还必须要实现findIdentityvalidateAuthKey这两个方法。

    退出

    logout()

    $this->switchIdentity(null);先把当前的认证设置为null

    再判断如果是自动登录功能则再删除相关的cookie信息

  • 相关阅读:
    JS中数组去除重复的方法
    ember.js里的实用方法
    Ember入门指南——教程目录
    如何解决问题?
    Web前端开发工程师基本要求
    (转)轻松学习JavaScript三:JavaScript与HTML的结合
    (转)JavaScript二:JavaScript语言的基本语法要求
    HTML的checkbox和radio的美化
    C#串口通信—向串口发送数据,同步接收返回数据
    C#生成验证码
  • 原文地址:https://www.cnblogs.com/baby123/p/4979766.html
Copyright © 2011-2022 走看看