首页 文章

设计Omniauth Twitter Rails 4

提问于
浏览
0

我已经花了几个小时,所以我在这里 . 从Ryans Railscast开始,我决定将twitter登录添加到我的rails / devise应用程序中 . 我跟踪了一下,遇到问题并解决了各种问题,直到我到达这里:当点击“使用Twitter登录”时,我被重定向到那里并在返回时,我得到以下问题:

用户:: OmniauthCallbacksController #twitter中的ActiveRecord :: StatementInvalid

SQLite3 :: SQLException:没有这样的列:users.provider:SELECT“users” . * FROM“users”WHERE“users” . “provider”='twitter'和“users” . “uid”='20323034'ORDER BY“用户“ . ”id“ASC LIMIT 1

这个问题非常接近这个其他stackoverflow问题,除了他们使用的是facebook登录而不是twitter . 请参阅最佳答案:

Devise, Omniauth and Facebook integration session error

请指教,谢谢!

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

得到“信息/联系”得到“信息/关于”获取“信息/登陆”获取“信息/测试”获取'/ users / sign_out'=>'设计/会话#stroy'

root“info#landing”结束

资源:事件做资源:注册结束

的Gemfile:

宝石'zurb-foundation'

宝石'设计'

宝石'omniauth-twitter'

宝石'omniauth'

宝石'oauth2'

1 回答

  • 3

    我将尝试以更彻底的答案作出回应,但对于初学者而言,此错误正在被抛出,因为您尚未向用户模型添加列以存储提供者名称(即“twitter”) . 您还需要存储twitter访问令牌,twitter uid和twitter secret . Facebook Omniauth只需要提供者,access_token和uid列,但除了这些之外,Twitter还需要存储一个秘密 .

    你在控制器中使用了什么逻辑?

    从终端运行以下迁移: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
    

    然后从终端:rake db:migrate

相关问题