2016-08-16 11 views
0

Я пытаюсь разрешить пользователям входить через Twitter, но я получаю сообщение об ошибке: Введите ошибку в SessionController. Я получаю эту ошибку всякий раз, когда меня перенаправляют на: https://api.twitter.com/oauth/authenticate, чтобы пользователь мог пройти аутентификацию. Я должен быть перенаправлен на страницу «Авторизовать приложение Twitter» после проверки подлинности, но я получаю полную ошибку: «TypeError in SessionsController # create: класс/объект класса ожидается». Я использую omniauth_twitter и изобретаю драгоценные камни для этой функции. Я пропустил что-то, что мне нужно сделать для разработки в файле routes.rb, возможно?TypeError в SessionsController # create при попытке войти в систему из API Twitter с помощью omniauth

Также он делает это с помощью метода create (в SessionController), поскольку он в конечном итоге перенаправляется на корневую страницу, но я не вижу пользователя, созданного в базе данных.

Controller Session

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" 
=> [] 

ответ

0

вы видите эту ошибку, потому что 1) вы поднимая исключение в SessionsController # создать (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 соответственно.

+0

Спасибо за ваш ответ. Да, я попробовал это раньше и взял его, и он по-прежнему не спасет пользователя в базе данных. Когда я пошел на консоль рельсов, я даже не вижу пользователя в моей модели пользователя: Загрузка производственной среды (Rails 4.2.1) [1] pry (main)> User.all Пользовательская нагрузка (3,2 мс) SELECT «users». * FROM «users» => [] – SaintClaire33

+0

Возможно ли это с помощью Devise? – SaintClaire33

+0

Я до сих пор не перенаправлен на страницу приложения авторизации Twitter. Может ли кто-нибудь пролить свет? – SaintClaire33

 Смежные вопросы

  • Нет связанных вопросов^_^