Я разрешаю пользователям регистрироваться на моем сервисе, используя свою учетную запись Slack.Rails, Omniauth for Slack: Как получить доступ к информации об аш-хеше
Я включил вход с провисанием через omniauth-slack gem.
Теперь у меня проблемы с доступом к электронной почте и другой информации.
Это, как я сейчас делаю это:
def self.find_for_slack_oauth(auth)
user = UserProvider.where(:provider => auth.provider, :uid => auth.uid).first
unless user.nil?
user.user
else
registered_user = User.where(:email => auth.info.email).first
unless registered_user.nil?
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = registered_user.id
user_provider.save!
registered_user.name = auth.info.name if registered_user.name == nil
registered_user.avatar = auth.info.image if registered_user.avatar == nil
registered_user.slack_id = auth.extra.raw_info.user_identity if registered_user.slack_id == nil
registered_user.slack_team_id = auth.extra.raw_info.team_identity if registered_user.slack_team_id == nil
registered_user.slack_team_name = auth.info.team_name if registered_user.slack_team_name == nil
registered_user.skip_confirmation!
registered_user.save!
registered_user
else
user = User.new
user.name = auth.info.name
user.email = auth.info.email
user.avatar = auth.info.image
user.slack_id = auth.extra.raw_info.user_identity
user.slack_team_id = auth.extra.raw_info.team_identity
user.slack_team_name = auth.info.team_name
user.password = Devise.friendly_token[0,20]
user.skip_confirmation!
user.save!
user_provider = UserProvider.new
user_provider.provider = auth.provider
user_provider.uid = auth.uid
user_provider.user_id = user.id
user_provider.save!
user
end
end
end
Но я не получаю никакой информации из него. Придумайте жалобы, что я не могу создать пользователя без электронного письма, которое не является пустым.
Что такое hash хэш, содержащий информацию?
EDIT:
я не получаю значения через Hash Auth.
Вот мой инициализации (devise.rb
):
config.omniauth :slack, Settings.slack.id, Settings.slack.secret, scope: 'identity.basic,identity.email,identity.team,identity.avatar'
Почему я получаю ничего?
В вашем методе у вас есть find_for_slack_oauth (auth) - часть 'auth' является хэшем. Он отправляется от контроллера обратных вызовов omniauth к модели для создания или обновления пользователя. Если вы хотите знать, что в нем, то в качестве первой строки этого метода вызывается 'raise auth.inspect' - это наполнит тонны информации в вашем браузере или в журнале, в котором вы сможете увидеть, где поле электронной почты сохраняется. – trh
Благодарим вас за этот фрагмент кода, вот чего мне не хватало, чтобы понять проблему! Пожалуйста, ознакомьтесь с обновленным вопросом. – jonhue
Удалите токен Slack с этого сообщения. Проведение реальных токенов здесь может поставить под угрозу безопасность вашей команды Slack. –