0

我试图允许用户通过 Twitter 登录,但出现错误:在 SessionsController 中键入错误。每当我被重定向到: https ://api.twitter.com/oauth/authenticate 时,我都会收到此错误,因此可以对用户进行身份验证。经过身份验证后,我应该被重定向到 Twitter“授权应用程序”页面,但我收到了完整的错误:“SessionsController#create 中的 TypeError:预期的异常类/对象”。我正在使用 omniauth_twitter 并为此功能设计 gems。我是否错过了在 routes.rb 文件中设计时需要做的事情?

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

会话控制器

 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

路由.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"
=> []
4

1 回答 1

0

您看到此错误是因为 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,或者,如果是,则raise使用合法参数(字符串、异常实例等)进行调用,并rescue相应地进行调用。

于 2016-08-16T12:52:17.413 回答