2017-01-15 4 views
0

Я разрешаю пользователям регистрироваться на моем сервисе, используя свою учетную запись 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' 

Почему я получаю ничего?

+1

В вашем методе у вас есть find_for_slack_oauth (auth) - часть 'auth' является хэшем. Он отправляется от контроллера обратных вызовов omniauth к модели для создания или обновления пользователя. Если вы хотите знать, что в нем, то в качестве первой строки этого метода вызывается 'raise auth.inspect' - это наполнит тонны информации в вашем браузере или в журнале, в котором вы сможете увидеть, где поле электронной почты сохраняется. – trh

+0

Благодарим вас за этот фрагмент кода, вот чего мне не хватало, чтобы понять проблему! Пожалуйста, ознакомьтесь с обновленным вопросом. – jonhue

+0

Удалите токен Slack с этого сообщения. Проведение реальных токенов здесь может поставить под угрозу безопасность вашей команды Slack. –

ответ

0

Я заметил, что я использовал неправильный охват.

Вместо:

config.omniauth :slack, Settings.slack.id, Settings.slack.secret, scope: 'identity.basic,identity.email,identity.team,identity.avatar' 

следует использовать:

config.omniauth :slack, Settings.slack.id, Settings.slack.secret, scope: 'team:read,users:read,identify' 

Я надеюсь, что это поможет кому-то! Документация Slack на самом деле не очень полезна.