2016-02-23 22:23:02 6406次浏览 2条回答 0 悬赏 10 金钱

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 条回复
    回复于 2016-02-24 10:43 回复

    原来他把auth_key放如到客户端的cookie中了,而不是把密码放进去。
    老的系统中表结构并没有access_token这个字段,能不能重写它的判断规则?

    回复于 2016-02-24 11:05 回复

    当然可以啦。你的user表是继承IdentityInterface的吧,重写getAuthKey()方法,设置放到cookie上的auth_key,重写validateAuthKey($authKey) 方法,里面设置你的验证方法.

    回复于 2016-02-24 11:11 回复

    access_token 不用他,没有关系的额。。 要改的话可以重写findIdentityByAccessToken()方法,
    yii2默认是直接抛错误 。
    `public static function findIdentityByAccessToken($token, $type = null){

        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    

    }`

您需要登录后才可以回答。登录 | 立即注册
javalzbin
副总裁

javalzbin 广东省广州市

注册时间:2016-02-23
最后登录:2017-04-18
在线时长:37小时36分
  • 粉丝6
  • 金钱6926
  • 威望150
  • 积分8796

热门问题