обновление пользовательской записи при связывании провайдеров с omniauth - PullRequest
0 голосов
/ 29 января 2011

Когда я создаю новую учетную запись через Google, электронная почта сохраняется в моей записи пользователя. Когда я создаю пользователя через твиттер, столбец электронной почты остается пустым. Я хотел бы обновить эту запись, если пользователь связывает свою текущую учетную запись в Twitter с Google.

в моей модели пользователя:

def self.create_from_hash!(hash)
  create! do |user|
    user.name = hash['user_info']['name']
    user.email = hash['user_info']['email']
  end
end

В сессиях контроллер:

def create
  auth = request.env['rack.auth']
  unless @auth = Authorization.find_from_hash(auth)
    @auth = Authorization.create_from_hash(auth, current_user)
  end
  self.current_user = @auth.user
  flash[:notice] = "Welcome, #{current_user.name}."
  redirect_to '/'
end

и в модели авторизации:

def self.create_from_hash(hash, user = nil)
  user ||= User.create_from_hash!(hash)
  Authorization.create(:user => user, :uid => hash['uid'], :provider => hash['provider'])
end

Как я могу обновить этот столбец при добавлении метода авторизации?

1 Ответ

0 голосов
/ 30 января 2011

Я добавил следующую строку в мое действие sessioncontroller create, которое, похоже, решило проблему:

if @user && (@user.email.blank? || @user.email.nil?)
    @user.update_attribute(:email, request.env['rack.auth']['user_info']['email']) unless request.env['rack.auth']['user_info']['email'].nil? || @user.nil?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...