您的位置:首页 > 编程语言 > PHP开发

YII 增加登陆认证

2015-08-27 14:37 573 查看
YII验证身份值可以设置一个MODEL来做为身份认证登陆的数据来源,这样当一个WEB应用中有两个角色并且都使用ACCESS TOKEN登陆时就会错误的把另一角色列为未认证的用户。

解决方法是修改框架认证部分的代码如下:

1. 在WEB CONFIG中设置另一个TOKEN的名字,注意如果有两种角色,那么必须让他们的TOKEN的名字是不一样的。

'user' => [
'identityClass' => 'app\models\Customer',//角色CUSTOMER
'gzhIdentityClass' => 'app\models\GzhAd',//角色GZH
'enableAutoLogin' => false,//disable the cookie login
],

2. 在USER COMPONENT(basic/vendor/yiisoft//yii2/web/user.php)中配合修改一要增加相应的字段名字,这里是$gzhIdentityClass
public $identityClass;
public $gzhIdentityClass;

3.在query parameter中要增加token的名字

public $gzhTokenParam = 'gzhToken';

并且还要相应的判断

//validate the token from 3rd party sever
$gzhAccessToken = $request->get($this->gzhTokenParam);
if (is_string($gzhAccessToken)) {
$identity = $user->loginByGzhAccessToken($gzhAccessToken, get_class($this));//在这里要调取USER COMPONENT中的loginByGzhAccessToken
if ($identity !== null) {
return $identity;
}
}


4.在USER COMPONENT中要实现3中的loginByGzhAccessToken

//validate the gzh access token
public function loginByGzhAccessToken($gzhAccessToken, $type = null)
{
$class = $this->gzhIdentityClass;
$identity = GzhAd::findIdentityByAccessToken($gzhAccessToken, $type);
if ($identity && $this->login($identity)) {
return $identity;
} else {
return null;
}
}


5.在GZH MODEL中也要继承IdentityInterface
并且实现所有接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: