2011-08-12 41 views
6

我已經加入simpleopenidselectorlightopenid用戶的Yii我的web應用程序和它驗證用戶並返回使用OpenID數據的URL。下一步是使用來自OpenID提供者的數據在Yii中創建一個新的身份以登錄該用戶。這對Yii如何完成?如何登錄與誼和OpenID

另外,我覺得我需要爲存儲的OpenID的同時還需要將用戶添加到我的用戶表創建一個OpenID表。如果用戶已經有一個帳戶,那麼將openid添加到他們的用戶帳戶以防止多個帳戶。

有沒有人實現這一切與誼?如果是這樣,我會對它是如何完成的感興趣。

+0

我沒有用它自己,但我不知道是否有可能這與[警予用戶(http://www.yiiframework.com/extension/yii-user/)擴展集成? – ldg

+0

@ldg - [yii-user-management](http://www.yiiframework.com/extension/yii-user-management/)包含openid,但我不需要整個用戶管理,我可以沒有按照足夠的代碼來看看他們如何實現openid登錄部分。我剛開始編寫OOP風格的代碼,所以這也讓它變得很難。我沒有看到你提到的yii用戶鏈接中的openid。 – Mark

回答

1

從OpenID的使用數據的Yii登錄,你可以修改/覆蓋UserIdentity類(受保護/組件)。

覆蓋現有authenticate方法。 此時,您還可以設置當前Yii的用戶名,如:

$this->username=$openId->username 

通過覆蓋面/ login動作(其中$openId->username應該由它包含的OpenID用戶名變量代替)你可以叫你修改的方法,如:

$identity=new UserIdentity("m","m");//where m is dummy 
if($identity->authenticate()) { 
      Yii::app()->user->login($identity); 
[...] 
} 

//更新(因爲您的評論的): 不知道,如果我理解你的問題所在。但是在UserIdentity中添加一個新方法,如authenticateOID()。調用此方法在原來的身份驗證()方法的開頭,就像這樣:

if ($this->authenticateOID) {/*set username & return true to end the method here*/} 
else {/*original authenticate method from Yii*/} 

裏面authenticateOID()你是否OID進行身份認證和/或如果用戶仍然在你們當地的「OID - 用戶表」

+0

由於我需要登錄註冊用戶和openid用戶,我寧可不覆蓋或更改當前的身份驗證。我試圖修改UserIdentity,但當我只有一個來自openid的用戶名時,總是遇到需要用戶名和密碼的問題。我需要檢查openid用戶是否是註冊用戶,以及通過檢查我的用戶表的用戶名。對不起,如果這沒有意義...我是Yii和OOP的新手。 – Mark

+0

@Mark我更新了我的文章...也許這有幫助嗎? –

+0

認證部分沒問題,這是我看起來無法鍛鍊的新UserIdentity部分。在OpenID登錄通過身份驗證後,我不需要再次驗證它,至少這正是我的想法。在用戶通過OpenID進行身份驗證後,我想創建一個新的UserIdentity,但當前的Yii用戶登錄方法在登錄時需要用戶密碼,而OpenID不需要這是我無法解決的問題。 – Mark