2014-01-15 58 views
0

我正在使用CakePHP 2.4.4,facebook_php_sdk並試圖通過facebook/linkedin登錄創建自己的函數來創建用戶。CakePHP Auth登錄(錯誤的方法?)

據我所知,Facebook沒有檢索密碼,所以我創建了一個空格密碼並在保存之前對它們進行哈希處理。我這樣做的原因是因爲「Auth Login」需要用戶名(我把它作爲電子郵件)和密碼(我對提供的CakePHP Auth不太清楚,這裏可能是這樣做的錯誤方法)。

現在我面臨的問題是,如果用戶通過「[email protected]」手動創建並輸入簡單的密碼,例如。稍後,如果此用戶通過使用同一電子郵件「[email protected]」創建的Facebook登錄,他/她將無法登錄,因爲數據庫中已經有此電子郵件。

我很確定那裏出了點問題,但不知道從哪裏開始,任何指南和指點將不勝感激。

這是我通過Facebook登錄: - 通過Facebook創建

$user_profile = $facebook->api('/me','GET'); 
    $this->request->data['User']['username'] = $user_profile['email']; 
    $this->request->data['User']['password'] = ' '; 
    $this->Auth->login() 

用戶: -

$data = array(
    'name'  => $user_profile['name'], 
    'username' => $user_profile['email'], 
    'email' => $user_profile['email'], 
    'password' => ' ', 
    'create_source' => 1 //Used this to differentiate from fb or linkedin 
); 

$this->User->save($data); 

感謝敘定答案,我應該這樣做: -

$this->Auth->login($user) 

還有一種情況: 如果用戶想要手動登錄賬戶最初由Facebook登錄創建,該怎麼辦?

+1

我不熟悉的Facebook或LinkedIn的API,但我認爲,除非有具有做一個理由API區分帳戶最初是由哪個帳戶創建的,因此您不應該區分這些帳戶,並允許用戶從該帳戶登錄該電子郵件地址。 – Kai

+0

謝謝凱,我通過許定的建議做到了這一點,我還有另一個情景,我在帖子底部更新。 –

回答

2

如果用戶名(email)已經存在,您可以使用Facebook ID找到它,並使用$ this-> Auth-> login($ user)直接登錄。看看這個插件的代碼,它包含使用Facebook登錄的全部邏輯:

function __syncFacebookUser 

https://github.com/webtechnick/CakePHP-Facebook-Plugin/blob/master/Controller/Component/ConnectComponent.php#LC129

+0

不錯的一個@XuDing,我幾乎忘了這可以幫助我一個很大的時間$ this-> Auth-> login($ user)。我還有一個問題,如果用戶想要手動登錄,但帳戶最初是由Facebook API創建的呢? –

+2

在這種情況下,您可以允許他們通過設置頁面更新密碼。更新後,他們將能夠正常登錄。 – XuDing