我已添加 simpleopenidselector和 lightopenid到我的 Yii Web 应用程序,它确实对用户进行了身份验证,并返回一个带有 openid 数据的 url。下一步是使用来自 OpenID 提供者的数据在 Yii 中创建一个新的身份来登录用户。 Yii 是如何做到的?
另外,我想我需要创建一个 openid 表来存储 openid 并且还需要将用户添加到我的用户表中。如果用户已经有一个帐户,则将 openid 添加到他们的用户帐户以防止多个帐户。
有人用 Yii 实现了这一切吗?如果是这样,我会对它是如何完成的很感兴趣。
最佳答案
要使用来自 openID 的数据作为 Yii 登录,您可以修改/覆盖 UserIdentity 类( protected /组件)。
覆盖现有的身份验证方法。
此时你还可以设置当前的 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 - 用户表”中
关于openid - 如何使用 Yii 和 OpenID 登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042942/