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