Rails,Omniauth for Slack:如何访问 Auth Hash 信息
Rails, Omniauth for Slack: How to access Auth Hash Information
我允许用户使用他们的 Slack 帐户注册我的服务。
我通过 omniauth-slack gem.
集成了 Slack 登录
现在我无法访问电子邮件和其他信息。
我目前是这样做的:
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
但我从中得不到任何信息。设计投诉,如果没有非空白的电子邮件,我将无法创建用户。
什么是 auth hash,其中包含信息?
编辑:
我没有通过 Auth Hash 获得任何值。
这是我的初始化(devise.rb
):
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: 'identity.basic,identity.email,identity.team,identity.avatar'
我应该使用:
config.omniauth :slack, Settings.slack.id, Settings.slack.secret, scope: 'team:read,users:read,identify'
我希望这对某人有所帮助!
Slack 文档对此没有真正帮助。
我允许用户使用他们的 Slack 帐户注册我的服务。
我通过 omniauth-slack gem.
集成了 Slack 登录现在我无法访问电子邮件和其他信息。
我目前是这样做的:
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
但我从中得不到任何信息。设计投诉,如果没有非空白的电子邮件,我将无法创建用户。
什么是 auth hash,其中包含信息?
编辑:
我没有通过 Auth Hash 获得任何值。
这是我的初始化(devise.rb
):
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: 'identity.basic,identity.email,identity.team,identity.avatar'
我应该使用:
config.omniauth :slack, Settings.slack.id, Settings.slack.secret, scope: 'team:read,users:read,identify'
我希望这对某人有所帮助! Slack 文档对此没有真正帮助。