我正在制作一个我只想使用 google 登录的应用程序(因为我正在使用其他 google api 并且我想同步帐户。)我也希望管理员也能够让其他用户成为管理员。
我想做一些用户管理员,但如果他们用谷歌登录,我怎样才能在控制器中出现这个异常?最好将特定用户保存在数据库中吗?我很困惑!请帮忙。
现在这就是我的管理员
用于检查谷歌登录的omniauth
class OmniauthCallbacksController < ApplicationController
def google_oauth2
if auth_details.info['email'].split("@")[1] == "company_name.net"
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
flash.notice = "Signed in Through Google!"
sign_in_and_redirect user
else
session["devise.user_attributes"] = user.attributes
flash.notice = "Please provide a password"
redirect_to new_user_registration_url
end
else
render :text => "Sorry this site is for company_name employees only"
end
end
end
管理员迁移到用户
class AddAdminToUser < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, :default => true
end
end
用户角色表
class CreateRoles < ActiveRecord::Migration
def change
create_table :roles do |t|
t.string :name
t.timestamps
end
end
end
HaveAndBelongToMany 迁移
class UsersHaveAndBelongToManyRoles < ActiveRecord::Migration
def self.up
create_table :roles_users, :id => false do |t|
t.references :role, :user
end
end
def self.down
drop_table :roles_users
end
end