尝试登录我的网站时,用户被重定向回主页,而无需登录。(用于登录的按钮仍然存在)
我的数据库正在为这些用户创建新条目,但没有更新任何信息。(除 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