无法使用API​​获取闲置的用户个人资料信息

时间:2019-12-01 06:04:11

标签: python slack

非常感谢您。我正在尝试通过slack_authentication获取用户个人资料信息。尽管该应用已成功通过Slack进行身份验证,但无法获得电子邮件用户名

  

{'ok':True,'access_token':'xoxp-xXXXXXXXXXXXXXXXXXXX','scope':'identify,channels:read,users.profile:read,chat:write:bot,identity.basic','user_id ':'XXXXXXXXX','team_id':'XXXXXXXX','enterprise_id':无,'team_name':'test','warning':'superfluous_charset','response_metadata':{'warnings':['superfluous_charset'] }}

我尝试添加identify范围而不是identity.basic,因为松弛不允许您同时使用identity.basic和其他范围。

代码如下:

@bp.route('/redirect', methods=['GET'])
def authorize():
    authorize_url = f"https://slack.com/oauth/authorize?scope={ oauth_scope }&client_id={ client_id }"

    return authorize_url

@bp.route('/callback', methods=["GET", "POST"])
def callback():
    auth_code = request.args['code']
    client = slack.WebClient(token="")
    response = client.oauth_access(
        client_id=client_id,
        client_secret=client_secret,
        code=auth_code
    )
    print(response)

其他

我已经意识到如何获得users info。我将代码更新为这样。

代码更新如下:

    oauth = client.oauth_access(
        client_id=client_id,
        client_secret=client_secret,
        code=auth_code
    )
    user_id = oauth['user_id']
    response = client.users_info(user=user_id)

但是会发生此错误:

  

服务器响应:{'ok':False,'error':'not_authed'}

1 个答案:

答案 0 :(得分:0)

您的代码看起来像是使用OAuth的Slack应用程序的安装例程。但是它不包含获取用户个人资料的调用。

要获取用户的个人资料,您可以致电users.info并提供您感兴趣的用户的ID。

示例:

response = client.users_info(user=ID_OF_USER)
assert(response)
profile = response['user']['profile']
email = response['user']['profile']['email']

为了检索用户的个人资料和电子邮件地址,您需要以下范围:  -用户:已读  -用户:read.email

身份范围与用户配置文件无关。它们仅用于“ Sign-in with Slack”方法,您可以在其中通过第三方网站上的Slack用户进行身份验证。

最后,请澄清一下,因为这经常被误解:您只需运行一次OAuth安装例程。该例程将为您生成工作空间的令牌,您可以将其存储并用于对该工作空间的API的任何进一步调用。

更新为“其他”

您没有正确使用API​​。

您需要首先完成Oauth流程并收集访问令牌,该令牌位于client.oauth_access的响应中。

然后,您需要使用收到的令牌初始化一个新的WebClient。有了新的客户端,您就可以访问所有API方法,例如users.info等。

再次:您应该只运行一次OAuth流程,并存储收到的令牌以备后用。

示例:

oauth_info = client.oauth_access(
    client_id=client_id,
    client_secret=client_secret,
    code=auth_code
)
access_token = oauth_info['access_token'] # you want to store this token in a database

client = slack.WebClient(token=access_token)
user_id = oauth_info['user_id']
response = client.users_info(user=user_id)
print(response)