socialforge/app/models/sso.rb

61 lines
1.3 KiB
Ruby

#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