无法使用暴雪的omniauth-bnet gem为某些STI用户类型创建会话

时间:2018-07-31 04:12:44

标签: ruby oauth-2.0 omniauth ruby-on-rails-5.1

我正在使用omniauth-bnet gem(而不是devise)在Rails 5应用程序上工作,通过该gem具有Single Sign On,并且使用Single Table Inheritance具有一些User类型。无论出于何种原因,管理员类型都可以正常登录,但是普通用户无法创建会话。这是一些相关的代码。

items_controller.rb:

before_action :check_authorization, except: [:show]
before_action :check_for_email, except: [:show]
...
private

def check_authorization
  unless current_user
    redirect_to root_path
  end
end

def check_for_email
  unless current_user.email
    redirect_to signup_add_email_url
  end
end

sessions_controller.rb:

class SessionsController < ApplicationController

def create
  begin
    @user = User.from_omniauth(request.env['omniauth.auth'])
    session[:user_id] = @user.id
    flash[:success] = "Well met, #{@user.name}!"
  rescue
    flash[:warning] = "There was an error while trying to create your 
account..."
  end
  redirect_to items_path
end
...

admin_user.rb:

class AdminUser < User
end

normal_user.rb:

class NormalUser < User
end

user.rb:

class User < ApplicationRecord
...

class << self
  def from_omniauth(auth_hash)
    user = find_or_create_by(name: auth_hash['info']['battletag'], uid: 
auth_hash['uid'], provider: auth_hash['provider'])
    user.name = auth_hash['info']['battletag']
    user.uid = auth_hash['uid']
    user.token = auth_hash['credentials']['token']
    user.save!
    user
  end
end

routes.rb:

...
# Auth
get '/auth/:provider/callback', to: 'sessions#create'
...

日志显示我的NormalUser类型会话从未创建。但是AdminUser类型登录没有任何问题...

有什么想法吗?我已经尝试了所有可以用Google或想到的方法。

0 个答案:

没有答案