Oauthlogin in yii


Oauthlogin in yii

我希望用户通过facebook和应用程序帐户验证自己。我已经设法验证他们的fb帐户和存储电子邮件,id和用户名信息到另一个表。应用程序用户可以登录:

Yii::app()->user->login($this->_identity,$duration); 

根据数据库检查用户和密码是否正确。但是,当用户通过他们的facebook帐户登录时,我如何改变这种行为,以便我可以全局访问Yii::app()->user->id。

当我遇到这个问题时,我最终使用http://www.yiiframework.com/extension/hybridauth/,并修改这里概述的HybridAuth的DefaultController。

基本要点是:

  • 在组件中创建一个RemoteUserIdentity类并对远程用户进行身份验证。
  • 修改你的UserIdentity类,允许用户在没有哈希密码的情况下登录。
  • 将OAuth数据存储在单独的表中,并与您的Users表建立关系。
  • 根据用户的FBUserId从用户获取用户信息
  • 创建一个新的LoginModel实例,并使用先前检索到的User信息预填充它
  • 运行LoginModel::login()并重定向

所以整个东西看起来像这样:

' ' '

$identity = new RemoteUserIdentity('facebook');
if ($identity->authenticate())
{
// Check to see if we have already logged the user in before
$user = UserMetadata::model()->findByAttributes(array('key'=>$provider.'Provider', 'value'=>$identity->userData['id']));
if ($user === NULL)
{
    // If we haven't, save their FB details to UserMetadata
    $user = new UserMetadata;
    $user->user_id = Users::model()->findByAttributes(array('email'=>$identity->userData['email']))->id;
    $user->key = $provider.'Provider';
    $user->value = $identity->userData['id'];
    $user->save();
}
$user = Users::model()->findByPk($user->user_id);
// Log the user in with just their email address
$model=new LoginForm(true);
$model->attributes=array(
    'username'=>isset($user->email) ? $user->email : $identity->userData['email'],
    'password'=>md5('PUBUSER'),
);
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login())
{
    $this->redirect(Yii::app()->user->returnUrl);
}
}

' ' '

请随意从Github中提取所有相关代码,并根据需要进行调整。希望这对你有帮助!

为什么不尝试扩展像facebook连接与facebook身份类已经实现。