You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.3 KiB
61 lines
1.3 KiB
#coding=utf-8
|
|
|
|
require 'base64'
|
|
|
|
class Sso < ActiveRecord::Base
|
|
belongs_to :user
|
|
attr_accessible :email, :name, :openid, :password, :school, :sex, :user, :user_id
|
|
|
|
validates :user_id, :user, :email, :openid, :presence => true
|
|
|
|
def self.sync_user(opt)
|
|
sso = Sso.where(openid: opt["openid"]).first
|
|
return sso if sso
|
|
|
|
sso = Sso.new
|
|
sso.name = opt["name"]
|
|
sso.openid = opt["openid"]
|
|
sso.email = opt["email"]
|
|
sso.password = opt["password"]
|
|
sso.school = opt["school"]
|
|
sso.sex = opt["sex"]
|
|
|
|
|
|
# 查邮箱
|
|
user = User.where(mail: opt["email"]).first
|
|
|
|
unless user
|
|
# 查用户名
|
|
|
|
user = User.where(login: opt["name"]).first
|
|
if user
|
|
# 跳到修改用户名
|
|
raise "exist user"
|
|
end
|
|
|
|
password = opt["password"]
|
|
if password.size < 8
|
|
password = random_pwd
|
|
end
|
|
us = UsersService.new
|
|
user = us.register(login: opt["name"], mail: opt["email"],
|
|
password: password,
|
|
:should_confirmation_password => false)
|
|
if user.new_record?
|
|
raise user.errors.full_messages.first
|
|
end
|
|
end
|
|
|
|
sso.user = user
|
|
sso.save!
|
|
return sso
|
|
end
|
|
|
|
|
|
private
|
|
def self.random_pwd
|
|
('a'..'z').to_a.shuffle[0..7].join
|
|
end
|
|
|
|
end
|