【问题标题】:Rails, Omniauth for Slack: How to access Auth Hash InformationRails、Omniauth for Slack:如何访问 Auth Hash 信息
【发布时间】:2017-01-15 21:20:32
【问题描述】:

我允许用户使用他们的 Slack 帐户注册我的服务。

我通过 omniauth-slack gem 将 Sign In 与 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'

为什么我什么也得不到?

【问题讨论】:

  • 在您的方法中,您有 find_for_slack_oauth(auth) - auth 部分是哈希。它从omniauth 回调控制器发送到模型以创建或更新用户。如果你想知道里面有什么,那么作为该方法的第一行调用raise auth.inspect——这会向你的浏览器或登录发送大量信息,你将能够看到电子邮件字段的位置存储。
  • 感谢您提供的代码 sn-p,这就是我理解问题所缺少的!请查看更新后的问题。
  • 请从这篇文章中删除 Slack 令牌。在此处发布真实令牌会危及 Slack 团队的安全。

标签: ruby-on-rails devise omniauth slack-api slack


【解决方案1】:

我注意到我只是使用了错误的范围。

代替:

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 文档对此并没有真正的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2023-03-10
    • 2015-07-19
    相关资源
    最近更新 更多