J'essaie de permettre aux utilisateurs de se connecter via Twitter, mais je reçois l'erreur: Erreur de type dans SessionsController. Je reçois cette erreur chaque fois que je suis redirigé vers: https://api.twitter.com/oauth/authenticate afin que l'utilisateur peut être authentifié. Je devrais être redirigé vers la page Twitter "Authorize App" après avoir été authentifié, mais je reçois l'erreur complète: "TypeError dans SessionsController # create: exception classe/object expected". J'utilise le omniauth_twitter et conçois des gemmes pour cette fonctionnalité. Ai-je manqué quelque chose que je dois faire pour concevoir dans le fichier routes.rb éventuellement?TypeError dans SessionsController # créer lorsque vous essayez de vous connecter à partir de Twitter API utilisant omniauth
De même, il passe par la méthode create (dans le SessionController) car il finit par rediriger vers la page racine, mais je ne vois pas l'utilisateur créé dans la base de données.
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
Modèle utilisateur
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
également l'utilisateur n'affiche dans la base de données, il doit être enregistré vers le bas
Loading production environment (Rails 4.2.1)
[1] pry(main)> User.all
User Load (3.2ms) SELECT "users".* FROM "users"
=> []
Merci pour votre réponse. Oui, j'ai essayé cela plus tôt et l'ai retiré, mais il n'a pas encore économisé l'utilisateur dans la base de données. Quand je suis allé à la console de rails je ne vois même pas l'utilisateur dans le mon modèle d'utilisateur: Chargement environnement de production (rails 4.2.1) [1] pry (principal)> User.all Charge d'utilisateur (3.2ms) SELECT "users". * FROM "users" => [] – SaintClaire33
Est-ce que c'est possiblement avec Devise? – SaintClaire33
Je ne suis toujours pas redirigé vers la page d'autorisation de Twitter. Quelqu'un peut-il nous éclairer? – SaintClaire33