openid - 如何使用 Yii 和 OpenID 登录用户

标签 openid yii lightopenid openid-selector

我已添加 simpleopenidselectorlightopenid到我的 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/

相关文章:

ruby-on-rails - Rails 与 Authlogic,如何删除默认验证?

php - PHP 5.3 的 OpenID 库

使用联合登录或 OpenID(不带 GAE)的 Android 应用程序 + Web 服务器 API

php - 来自数据库的 Yii 系统参数。 Yii::app()->getParams() 没有给出结果

java - Tomcat + Struts + OpenID 引发 ServletExceptions

php - 将下拉列表中的多个输入保存到数据库

php - Yii - 使用 CHTML::link() 创建绝对 URL

php - OpenID登录后获取数据

php - 使用... openid 获取gmail 地址?授权?

php - 数据库中的 OpenID 重复结果