在sessionscontroller# create中,当尝试使用omniauth从Twitter API登录用户时出



我试图让用户通过Twitter登录,但我得到错误:在SessionsController类型错误。每当我被重定向到:https://api.twitter.com/oauth/authenticate以便对用户进行身份验证时,我都会得到这个错误。我应该被重定向到Twitter"授权应用程序"页面经过身份验证后,但我收到完整的错误:"类型错误在SessionsController#创建:异常类/对象预期"。我正在使用omniauth_twitter并为该功能设计gem。我是否错过了一些我需要为路线设计的东西。可能是Rb文件吗?

它也使它通过创建方法(在SessionController),因为它最终重定向到根页面,但我没有看到在数据库中创建的用户。

<<p> 会话控制器/strong>
 class SessionsController < ApplicationController
 def create
  @user = User.find_or_create_from_auth_hash(auth_hash)
  session[:user_id] = @user.id
  redirect_to root_path
 end
 protected
 def auth_hash
  request.env['omniauth.auth']
 end
end

用户模型

class User < ActiveRecord::Base
 devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
 before_create :generate_auth_token
def self.find_or_create_from_auth_hash(auth_hash)
user = where(provider: auth_hash.provider, uid:   auth_hash.uid).first_or_create
user.update(
  name: auth_hash.info.name,
  avatar: auth_hash.info.image,
  token: auth_hash.credentials.token,
  secret: auth_hash.credentials.secret)
user
end
 def generate_auth_token
 loop do 
  self.auth_token = SecureRandom.base64(64)
  break unless User.find_by(auth_token)
 end   
end
end

Routes.rb

Rails.application.routes.draw do
   get 'auth/:provider/callback', to: 'sessions#create'
   resources :tweets
   get 'signup/new'
   get 'signup/create'

   devise_for :users

   resources :contacts
  end

同时用户没有显示在数据库中,应该保存

Loading production environment (Rails 4.2.1)
[1] pry(main)> User.all
User Load (3.2ms)  SELECT "users".* FROM "users"
=> []

你看到这个错误是因为1)你在sessionscontroller# create (raise :test)和2)raise不期望一个符号,这就是为什么你看到这个神秘的错误消息。

λ irb
2.3.1 :001 > raise :test
TypeError: exception class/object expected
        from (irb):1:in `raise'
        from (irb):1
        from /home/peter/.rvm/rubies/ruby-2.3.1/bin/irb:11:in `<main>'

如果它实际上不应该在那里,您应该删除调用以引发,或者,如果它在那里,则使用合法的参数(字符串,异常实例等)调用raise和相应的rescue

最新更新