2015-08-10 10:45:42 3164次浏览 3条回答 0 悬赏 10 金钱

不是就这样就可以了吗?Yii::$app->user->login($user, $this->rememberMe ? 3600 * 24 * 10 : 0)
我勾选记住登录,名字是_identity的cookie是有的,这是自动登陆的凭证吧?
我的怎么没用,还要做其他什么操作吗?
我用的就是Yii自带的那套。

user的配置:

'user' => [
    'identityClass' => 'common\models\User',
    'enableAutoLogin' => true,
    'loginUrl' => ['user/login', 'ref' => 1],
    'authTimeout' => 1800,
],

User实现的IdentityInterface接口代码如下:

/**
 * 通过user id查找身份
 * 
 * @param user_id $id        	
 * @return Ambigous <\yii\db\static, NULL>
 */
public static function findIdentity($id) 
{
	return static::findOne ( [ 
			'user_id' => $id,
			'enabled' => self::STATE_ENABLED 
	] );
}

/**
 * 用token查找身份,这个方法暂时没有用处
 * 
 * @param string $token        	
 * @param string $type        	
 */
public static function findIdentityByAccessToken($token, $type = null) 
{
	return null;
}

/**
 * 取得可用用来验证用户身份的KEY,每个用户的key需要唯一
 * 
 * @return string
 */
public function getAuthKey() 
{
	return null;
}

/**
 * 取user id
 * 
 * @return number
 */
public function getId() 
{
	return $this->user_id;
}

/**
 * 验证authKey
 * 
 * @param string $authKey        	
 * @return boolean
 */
public function validateAuthKey($authKey) 
{
	return $this->getAuthKey () === $authKey;
}

搞定:

    $cookie->value = json_encode([
        $identity->getId(),
        $identity->getAuthKey(),
        $duration,
    ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

最佳答案

  • naivefang 发布于 2015-08-10 11:30 举报

    应用配置里面,对component['user']的配置代码贴一下。

    如果是你们自己实现的Identity类,把实现IdentityInterface的类代码也需要贴一下。这样才好方便你诊断问题。

    2 条回复
    回复于 2015-08-10 11:39 回复

    已更新问题。

    回复于 2015-08-10 12:47 回复

    
    /**
     * 取得可用用来验证用户身份的KEY,每个用户的key需要唯一
     * 
     * @return string
     */
    public function getAuthKey() 
    {
    	return null;
    }
    
    

    getAuthKey这里不要返回null,返回user_id之类可以唯一区分一个用户的东西。 你直接设置cookie的值不是不可以,但是,实现得怪怪的..

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
dyllen
经理

dyllen

注册时间:2014-09-09
最后登录:2020-10-16
在线时长:48小时47分
  • 粉丝8
  • 金钱400
  • 威望80
  • 积分1680

热门问题