2013-09-24 88 views
0

我已經花了幾個小時在這裏,所以我在這裏。從Ryans Railscast開始,我決定將twitter登錄添加到我的rails/devise應用程序中。我跟着它,有一些問題,並排除了各種問題,直到我到達這裏:當點擊「使用twitter登錄」時,我被重定向到那裏,返回後,我得到以下問題:Devise + Omniauth + Twitter + Rails 4

ActiveRecord :: StatementInvalid in Users :: OmniauthCallbacksController#twitter

SQLite3 :: SQLException:no such column:users.provider:SELECT「users」。* FROM「users」WHERE「users」。「provider」='twitter'AND「users」。 「uid」='20323034'ORDER BY「users」。「id」ASC LIMIT 1

這個問題非常接近於這個其他的stackoverflow問題,除了他們使用facebook登錄而不是twitter。見上面的評論最多的回答:

Devise, Omniauth and Facebook integration session error

請指教,謝謝你們!

路線: devise_for:用戶:控制器=> {:omniauth_callbacks => 「用戶/ omniauth_callbacks」:註冊=> 「註冊」}做

獲得 「信息/接觸」 獲得「信息/關於」 獲得 「信息/登陸」 獲得 「信息/測試」 得到 '/用戶/ SIGN_OUT'=> '設計/會話#摧毀'

根 「信息#落地」 結束

資源:事件做 個資源:註冊 結束 結束

的Gemfile:

寶石 'zurb基金會'

寶石 '設計'

寶石'omniauth,Twitter的

寶石 'omniauth'

gem'oauth2'

+0

請您在用戶表'provider'有一列? – mathieugagne

+0

您是否在某一點運行'rake db:migrate'來添加它? – mathieugagne

+0

跑耙,沒有增加。我很擔心添加列以防萬一我不需要它,而其他的東西是不對的。看起來像一個兔子洞下去。 – piratebroadcast

回答

2

我會嘗試用更徹底的回答做出迴應,但對於初學者來說,由於您尚未向用戶模型添加列來存儲提供者名稱(即, 「推特」)。你還需要存儲twitter訪問令牌,twitter uid和twitter密碼。 Facebook Omniauth只需要提供商,access_token和uid專欄,但除了這些之外,Twitter還需要存儲一個祕密。

您在控制器中使用了什麼邏輯?從終端軌摹遷移AddTwitterColumnsToUsers

class AddTwitterColumnsToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :provider, :string 
    add_column :users, :access_token, :string 
    add_column :users, :uid, :string 
    add_column :users, :twitter_secret, :string 
    end 
end 

然後:

從終端,運行以下遷移耙分貝:遷移

+0

我搬到這,現在居住在控制器/用戶/ 要點:https://gist.github.com/piratebroadcast/976ca80fbe0afb9e23ef 如果看起來對你很好,我將運行您的遷移。我是否會遇到非oauth註冊和無值的錯誤?謝謝。 – piratebroadcast

+0

跑了,現在有這樣的錯誤:未知屬性:名稱 回報registered_user 否則 用戶= User.create(名稱:auth.info.name, 提供商:auth.provider, UID:auth.uid, 電子郵件:?auth.uid +「@ twitter.com」, – piratebroadcast

+0

你在你的user表中有一個「名稱」一欄的方法,錯誤注意到試圖在用戶的名稱保存到一個名爲「名稱」列在哪裏以下方法User.create(名稱:auth.info.name,供應商:auth.provider ... –

相關問題