我已将simpleopenidselector和lightopenid添加到我的Yii网络应用中,它会对用户进行身份验证,并返回包含openid数据的网址。下一步是使用OpenID提供程序中的数据在Yii中创建新标识以登录用户。如何用Yii完成?
另外,我认为我需要创建一个openid表来存储openid,还需要将用户添加到我的用户表中。如果用户已经拥有帐户,则将openid添加到其用户帐户以防止多个帐户。
有没有人用Yii实现了这一切?如果是这样,我会对它是如何完成感兴趣。
答案 0 :(得分:1)
要使用openID中的数据作为Yii登录,您可以修改/覆盖UserIdentity类(受保护/组件)。
覆盖现有的身份验证方法。 此时,您还可以设置当前的Yii用户名,例如:
$this->username=$openId->username
(其中$openId->username
应替换为包含openID用户名的变量)
通过覆盖side / login操作,您可以调用修改后的方法,如下所示:
$identity=new UserIdentity("m","m");//where m is dummy
if($identity->authenticate()) {
Yii::app()->user->login($identity);
[...]
}
//更新(因为你的评论): 如果我理解你的问题,我不确定。但是在UserIdentity中添加一个新方法是什么,比如authenticateOID()。在原始authenticate()方法的开头调用此方法,如下所示:
if ($this->authenticateOID) {/*set username & return true to end the method here*/}
else {/*original authenticate method from Yii*/}
在authenticateOID()
内,您检查OID身份验证是否已完成和/或用户是否仍在本地“OID - 用户表”