首先,我简单地想知道如何使用oauth作品。我们需要传递这个插件以及这个插件将返回什么。我们是否必须为不同的php框架定制插件。我已经看到它们是不同框架的oauth的不同扩展,为什么会这样?
我需要在yii框架中使用社交网络对用户进行身份验证,并且我已经集成了yii的eouath扩展以使用oauth并且已经采取行动来使用google用户的广告服务这样
公共功能actionGoogleAds(){
Yii::import('ext.eoauth.*');
$ui = new EOAuthUserIdentity(
array(
//Set the "scope" to the service you want to use
'scope'=>'https://sandbox.google.com/apis/ads/publisher/',
'provider'=>array(
'request'=>'https://www.google.com/accounts/OAuthGetRequestToken',
'authorize'=>'https://www.google.com/accounts/OAuthAuthorizeToken',
'access'=>'https://www.google.com/accounts/OAuthGetAccessToken',
)
)
);
if ($ui->authenticate()) {
$user=Yii::app()->user;
$user->login($ui);
$this->redirect($user->returnUrl);
}
else throw new CHttpException(401, $ui->error);
}
如果我想使用其他服务,例如linkedin,facebook,twitter,只是为了注册用户,我应该更改范围和参数,还是必须在其他地方进行一些更改。如何将用户信息存储在我自己的数据库中?
答案 0 :(得分:4)
在简单的情况下,您可以将表“ identities ”与字段“* external_id *”和“ provider ”一起使用。每个OAuth提供商都必须提供唯一的用户标识符(仅适用于该提供商)。要使其在您的站点上唯一,您可以使用与提供程序预定义名称(常量)的对。以及任何其他附加字段(如果提供商提供)。
在同一个表中,您应该存储内部授权的身份数据,提供者名称为“custom”(例如)。要存储密码和其他数据,请使用单独的表,此表中的PK将是您的“* external_id *”。普遍计划。
PHP,就像这样:
class UserIdentity extends CUserIdentity
{
protected $extUserID;
public function __construct($extUserID)
{
$this->extUserID = $extUserID;
}
...
public function authenticate()
{
...
//After search $this->extUserID as PK in users table (built-in authorization)
...
$identity = Identities::model()->findByAttributes(array(
'ext_id' => $this->extUserID,
'service' => 'forum',
));
if(!count($identity))
{
$identity = new Identities;
$identity->ext_id = $this->extUserID;
$identity->service = 'forum';
$identity->username = $userData['username'];
$identity->save();
}
$this->setState('id', $identity->id);
...
}
}