我试图允许用户通过 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"
=> []