Omniauth + Rails 不更新数据库和登录



尝试登录我的网站时,用户被重定向回主页,而无需登录。(用于登录的按钮仍然存在)

我的数据库正在为这些用户创建新条目,但没有更新任何信息。(除 id、提供程序和 uid 之外的所有列均为空)

我什至不确定从哪里开始寻找解决此错误。在我向用户模型添加另一列之前,这是有效的。

请帮忙!

会话控制器

class SessionsController < ApplicationController
layout false
def new
end
def create
    begin
        @user = User.from_omniauth(request.env['omniauth.auth'])
        session[:user_id] = @user.id
        flash[:success] = "Welcome, #{@user.name}!"
    rescue
        flash[:warning] = "There was an error while trying to authenticate you..."
    end
redirect_to root_path
end
def destroy
    if current_user
        session.delete(:user_id)
        flash[:success] = 'See you!'
    end
        redirect_to root_path
end
end

用户控制器

class UsersController < ApplicationController
def current_user
    @current_user ||= User.find_by(id: session[:user_id])
end
helper_method :current_user
def show
end
def edit
    @all_events = Event.all
    @user_events = current_user.userevents.build
end
def update
    params[:events][:id].each do |event|
        if !event.empty?
            current_user.userevents.build(:event_id => event)
        end
    end
    eventlist = Event.all
    usereventlist = Userevent.all
    eventstring = ""
    Userevent.dedupe
    usereventlist.each do |ue|
        if current_user.id == ue.user_id
            eventlist.each do |ei|
                if ei.id == ue.event_id
                    eventstring += ei.event + " "
                end
            end
        end
    end
    current_user.events = eventstring
    current_user.save!
    redirect_to current_user
end  
end
用户

模型(用户角色是添加的行)

class User < ActiveRecord::Base
class << self
    def from_omniauth(auth_hash)
        user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
        user.name = auth_hash['info']['name']
        user.location = auth_hash['info']['location']
        user.image_url = auth_hash['info']['image']
        user.url = auth_hash['info']['urls']['user.provide.capitalize']
        user.email = auth_hash['info']['email']
        user.events = nil
        user.school = nil
        user.role = nil
        user.save!
        user
    end
end
has_many :userevents
end

迁移#_create_users.rb

class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
    t.string :provider, null: false
    t.string :uid, null: false
    t.string :name
    t.string :location
    t.string :image_url
    t.string :url
    t.timestamps null: false
end
    add_index :users, :provider
    add_index :users, :uid
    add_index :users, [:provider, :uid], unique: true
end
end

迁移#_add_roles_to_users.rb

class AddRolesToUsers < ActiveRecord::Migration
def change
  add_column :users, :role, :string
end
end

尝试:

def from_omniauth(auth_hash)
  user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider']).tap do |user|
    user.name = auth_hash['info']['name']
    user.location = auth_hash['info']['location'          user.image_url = auth_hash['info']['image']
    user.url = auth_hash['info']['urls']['user.provide.capitalize']
    user.email = auth_hash['info']['email']
    user.events = nil
    user.school = nil
    user.role = nil
  end
  user.save
end

最新更新