2013-03-20 94 views
1

我有Rails應用程序與寶石設計+寶石omniauthn(多個提供商)。我也跟着這個教程:帶有omniauth註冊中必填字段的表單。 (Ruby on Rails)

用戶模型:

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable 
    attr_accessible :name, :email, :country, :password, :password_confirmation, :remember_me 
    has_many :authentications, :dependent => :delete_all 

    def apply_omniauth(auth) 
    self.email = auth['extra']['raw_info']['email'] 
    authentications.build(:provider => auth['provider'], :uid => auth['uid'], :token => auth['credentials']['token']) 
    end 

認證模型:http://blog.yangtheman.com/2012/02/09/facebook-connect-with-rails-omniauth-devise/https://github.com/klebershimabuku/fb_auth_demo應用的示例)

attr_accessible :provider, :token, :uid, :user_id 
belongs_to :user 

認證控制器:

def create 
    auth = request.env["omniauth.auth"] 

    # Try to find authentication first 
    authentication = Authentication.find_by_provider_and_uid(auth['provider'], auth['uid']) 

    if authentication 
     # Authentication found, sign the user in. 
     flash[:notice] = "Signed in successfully." 
     sign_in_and_redirect(:user, authentication.user) 
    else 
     # Authentication not found, thus a new user. 
     user = User.new 
     user.apply_omniauth(auth) 
     if user.save(:validate => false) 
     flash[:notice] = "Account created and signed in successfully." 
     sign_in_and_redirect(:user, user) 
     else 
     flash[:error] = "Error while creating a user account. Please try again." 
     redirect_to root_url 
     end 
    end 
    end 

當我註冊了設計我可以填寫一些額外的字段,如姓名和國家。但是當我用omniauth註冊時,我無法填充這些字段,因爲它根本沒有形成,所以它們在註冊後是NULL。所以我的問題:我怎樣才能添加一個表單所需的額外字段omniauth註冊?

+0

你有沒有發現,如何做到這一點? – Cyzanfar 2016-10-20 04:12:12

回答

0

Omniauth用於使用其他登錄信息登錄,您的網站 - 像Facebook,微博等

因此,當用戶使用omniauth登錄到你的網站,你可以收集來自網站用戶信息正在使用登錄到您的網站。

例如:如果用戶正在使用來自Facebook的登錄,則可以從用戶用於登錄的站點收集用戶從該用戶處獲得的該城市和其他信息。所以更多的信息,你可以從(僞)獲得:

auth['extra']['raw_info']['state'] 

編輯: 哈氏此說,你可以按照這個railcast 信息如何添加其他字段來註冊。

此外,另一種方式來遵循創建設備/ omniauth是遵循this page(隨便說)

+0

這是omniauth mannnn的一面.. – 2013-03-20 13:30:43

+1

謝謝你的回答,但我不想從fb或twitter獲得額外字段的信息,用戶應該自己填寫這些必填字段。 – Bennington 2013-03-20 13:32:48

+0

@Bennington謝謝。我已經更新了答案。也許這可以幫助你。 – Aleks 2013-03-20 13:37:16