简体   繁体   English

Devise + Omniauth + Twitter + Rails 4

[英]Devise + Omniauth + Twitter + Rails 4

I've spent a few hours on this so here I am. 我已经花了几个小时在这里,所以我在这里。 Starting with Ryans Railscast, I decided to add twitter login to my rails / devise app. 从Ryans Railscast开始,我决定将twitter登录名添加到我的rails / devise应用程序中。 I followed it for a bit, had issues and troubleshooted various issues until I got here: When clicking "Sign in with twitter", I am redirected there and upon return, I get the following issue: 我跟踪了一下,遇到了问题,并对各种问题进行了故障排除,直到到达这里:单击“使用Twitter登录”时,我被重定向到该位置,返回时出现以下问题:

ActiveRecord::StatementInvalid in Users::OmniauthCallbacksController#twitter 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 SQLite3 :: SQLException:没有这样的列:users.provider:SELECT“ users”。* FROM“ users” WHERE“ users”。“ provider” ='twitter'AND“ users”。“ uid” ='20323034'ORDER BY“ users“。” id“ ASC LIMIT 1

This issue is very close to this other stackoverflow problem, except they are using the facebook login rather than twitter. 这个问题与其他stackoverflow问题非常接近,除了他们使用的是Facebook登录名而不是twitter。 See top comment on top answer: 请参阅顶部答案的顶部评论:

Devise, Omniauth and Facebook integration session error Devise,Omniauth和Facebook集成会话错误

Please advise, and thank you! 请指教,谢谢!

routes: devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" } do 路由:devise_for:users,:controllers => {:omniauth_callbacks =>“ users / omniauth_callbacks”,:registrations =>“ registrations”}做

get "info/contact" get "info/about" get "info/landing" get "info/test" get '/users/sign_out' => 'devise/sessions#destroy' 得到“信息/联系”得到“信息/关于”得到“信息/着陆”得到“信息/测试”得到'/ users / sign_out'=>'devise / sessions#destroy'

root "info#landing" end 根“ info#landing”结尾

resources :events do resources :registrations end end 资源:事件完成资源:注册结束

gemfile: gemfile:

gem 'zurb-foundation' 宝石“ zurb基础”

gem 'devise' 宝石``设计''

gem 'omniauth-twitter' 宝石'omniauth-twitter'

gem 'omniauth' 宝石'omniauth'

gem 'oauth2' 宝石'oauth2'

I will try to respond with a more thorough answer, but for starters this error is being thrown because you have not yet added columns to your User model to store the provider name (ie "twitter"). 我将尝试以更彻底的答案做出回应,但是对于初学者来说,由于尚未将列添加到用户模型中以存储提供者名称(即“ titter”),因此引发了此错误。 You also need to store the twitter access token, twitter uid, and twitter secret. 您还需要存储Twitter访问令牌,Twitter uid和Twitter秘密。 The Facebook Omniauth only requires the provider, access_token, and uid columns, but Twitter needs to store a secret in addition to these. Facebook Omniauth仅需要provider,access_token和uid列,但Twitter除了这些之外还需要存储一个秘密。

What logic are you using in your controller? 您在控制器中使用什么逻辑?

From terminal, run the following migration: rails g migration AddTwitterColumnsToUsers 从终端运行以下迁移:rails g migration 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

And then from terminal: rake db:migrate 然后从终端:rake db:migrate

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM