2012-02-02 31 views
12

我希望別人對這個問題有一個很好的解決方案。我們讓用戶使用Facebook註冊(喜歡一個應用程序),同時他們以我們網站上的用戶身份進入我們的數據庫。Devise,OmniAuth&Facebook - 如何讓用戶編輯密碼?

成功註冊後,似乎Devise/OmniAuth正在創建一個隨機密碼(?)。我如何讓用戶編輯他們的個人資料,默認情況下(並且應該)在Devise中要求他們輸入他們的當前密碼?

回答

8

我有完全相同的問題,所以我希望我的解決方案會有所幫助。

根據關你的問題的細節我假設你按照OmniAuth指南中的色器件維基:https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

在下面的方法:

def self.find_for_facebook_oauth(access_token, signed_in_resource=nil) 
    data = access_token.extra.raw_info 
    if user = User.where(:email => data.email).first 
    user 
    else # Create a user with a stub password. 
    User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) 
    end 
end 

我在else塊,因爲改變了邏輯它是在數據庫中創建一個新的用戶馬上和他們散列密碼:

else # Create new user 
     user =User.new 
     user 
end 

相反,我只是做了一個新的用戶因此T獲得Facebook信息後的帽子我將他們引導至註冊頁面,在那裏我的信息已填寫在表單字段中,他們可以編輯和創建密碼。

你只需要確保更新您的

def self.new_with_session(params, session) 

添加你抓住新用戶的有關Facebook的信息,並將其分配給新的用戶對象,所有這些領域都與填充自己信息在註冊頁面。所以,他們完成後輸入密碼並添加或更改任何信息,然後單擊提交創建新用戶。希望你覺得這有幫助。

這是觀念上制定的wiki頁面和railscast omniauth教程混搭:http://railscasts.com/episodes/235-omniauth-part-1

+0

我想這是一個很好的解決方案。當我們通過Facebook連接時立即創建用戶將對我非常有幫助。我想我可以有一個像「hascreatedownpassword」雖然布爾字段。感謝這個想法。 – 2012-02-11 14:29:34

相關問題