用户登录和自动登录的问题 [ 2.0 版本 ]
yii默认的用户登录,是以它原本提供的user表的结构进行验证的,但是,如果是原有的系统进行重构,原有的用户表设定并不是和yii提供的user表的结构类似,简单的说,密码的加密就不是按照yii提供的加密方式进行,也没有auth_key,access_token,那么,如果在这种结构上进行登录验证,如何做呢?
还有自动登录的问题,yii在设定了自动登录后,下次就不需要重新登录了,此时,如果管理员修改了用户的信息,比如,修改了用户的密码,那么,由于用户是自动登录的,也就意味着已经没有验证新密码,就访问到系统了,这种情况如何解决呢?
最佳答案
-
dingjj2010 发布于 2016-02-24 09:10 举报
先解释自动登录的问题,就刚好用到auth_key,自动登录是根据cookie,获取cookie中用户id,然后去数据库获取用户信息,然后在查询出来的用户信息中auth_key和cookie中的auth_key进行匹配,在改密码后,会改auth_key字段的内容,匹配失败,要重新登录。
同理,access_token也是自动登录用的,一般是登录链接上带一长串字符,访问就可以登陆了。
没有这两个字段,access_token自动登录方式不能使用,cookie登录验证也会失败。
如果一定不用这2个字段,access_token自动登录方式不要用,cookie登录去掉auth_key验证(当然,这会出现你说的改密码不需要重登的问题。)。共 3 条回复dingjj2010 回复于 2016-02-24 11:05 回复@javalzbin 当然可以啦。你的user表是继承IdentityInterface的吧,重写getAuthKey()方法,设置放到cookie上的auth_key,重写validateAuthKey($authKey) 方法,里面设置你的验证方法.
dingjj2010 回复于 2016-02-24 11:11 回复@javalzbin access_token 不用他,没有关系的额。。 要改的话可以重写findIdentityByAccessToken()方法,
yii2默认是直接抛错误 。
`public static function findIdentityByAccessToken($token, $type = null){throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
}`
其他 1 个回答
-
dingjj2010 回答于 2016-02-24 09:10 举报
呃呃呃呃呃呃,多点了一次,还不能删除了。
javalzbin 广东省广州市
最后登录:2017-04-18
在线时长:37小时36分
- 粉丝6
- 金钱6926
- 威望150
- 积分8796