0

似乎我不是唯一一个与其他 OAuth 提供商和设计有此问题的人。我正在尝试使用他们的 Tumblr 帐户对用户进行身份验证,将他们的昵称存储为用户的用户名,并存储他们的 oauth 令牌和秘密,以便我的应用程序可以在他们采取某些操作时自动发布到 Tumblr。

我关注了各种文章aboutomniauth和devise (我的代码基于 Railscast #235 集),但我无法完全获取存储在数据库中的用户数据。第一个尝试验证“工作”的用户很好(它创建了一个用户名,但没有别的),但是任何其他尝试登录/验证的用户,总是被分配第一个用户的凭据(并且在数据库中没有条目)。

我正在使用 Rails 4.0.0 和 Ruby 2.0.0-p195。我需要对强参数做些什么吗?

幕后发生了一些事情,没有错误消息,我只是不知道如何找出去哪里看。这是我的代码:

# user.rb
def self.from_omniauth(auth)
    if user = User.find_by_username(auth.info.name)
      user.provider = auth.provider
      user.uid = auth.uid
      user
    else
      where(auth.slice(:provider, :uid)).first_or_create do |user|
        user.provider = auth.provider
        user.uid = auth.uid
        user.username = auth.info.nickname
        user.oauth_token = auth.info.credentials.token
        user.oauth_token_secret = auth.info.credentials.secret
      end
    end
  end

我的控制器(基本上与我读过的所有其他教程相同)

class OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def tumblr
    user = User.from_omniauth(request.env["omniauth.auth"])
    if user.persisted?
      flash.notice = "Signed in Through Tumblr!"
      sign_in_and_redirect user
    else
      session["devise.user_attributes"] = user.attributes
      # flash.notice = "You are almost Done! Please provide a password to finish setting up your account"
      redirect_to root_url
    end
  end
end

如果有人对我可能做错了什么有任何见解,或者甚至知道如何弄清楚(我不介意寻找,只是出于想法),我将非常感激。

谢谢!

4

1 回答 1

0

看起来答案相当简单,但我完全没有怀疑。当我把!在我的创建方法中,我在名为的用户模型中收到有关我的设计创建索引的错误:index_users_on_email

所以我创建了这个迁移来删除它:

class RemoveIndexUsersOnEmailFromUsers < ActiveRecord::Migration
  def self.up
    remove_index(:users, :name => 'index_users_on_email')
  end

  def self.down
    add_index(:users, :name => 'index_users_on_email')
  end
end

瞧!希望对某人有所帮助。

于 2013-08-12T02:08:40.053 回答