иметь поле userid в рельсах 3, используя devise и omniauth - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть приложение, которое в настоящее время использует devise и omniauth для аутентификации с использованием gmail openID.Теперь я хотел бы назначить каждому пользователю уникальный идентификатор пользователя.Таким образом, они все равно будут входить в систему, используя свои учетные данные gmail, но теперь у них будет идентификатор пользователя, на который они будут ссылаться.

Как я могу добавить это в мою схему?

1 Ответ

0 голосов
/ 07 февраля 2011

Ваш сценарий миграции должен был создать столбец id по умолчанию при создании пользовательской таблицы. Значения в этом столбце должны быть уникальными, чтобы вы могли использовать его как уникальный идентификатор для всех пользователей. Если это не отвечает вашим потребностям, вы можете просто добавить еще один столбец в базу данных, а затем установить для этого поля уникальный идентификатор в вашем OmniauthCallbacksController, когда вы создаете пользователей, которых еще нет в базе данных.

Например, в примере facebook на странице devise вы можете изменить метод find_for_facebook_oauth, который вызывается из OmniauthCallbacksController, чтобы он создавал ваше новое поле при создании пользователя.

def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
  data = access_token['extra']['user_hash']
  if user = User.find_by_email(data["email"])
    user
  else # Create an user with a stub password.
    # Add code here to create unique identifier for the user 
    # and make sure your field is passed to the create! method
    User.create!(:email => data["email"], :password => Devise.friendly_token[0,20]) 
  end
end 
...