You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Slack登录django-allauth时无法获取social_token问题

解决django-allauth获取Slack带过期时间token的问题

1. 补充Slack应用权限配置

当前配置的User Token Scopes仅包含email、openid、profile,需要在Slack应用后台的User Token Scopes中添加identity.basic权限,完成后重新安装应用到目标工作区,确保新权限生效。

2. 调整django-allauth的Slack Provider配置

在项目settings.py中完善Slack的社交账号配置,明确请求参数与权限范围,确保allauth能正确获取并存储token:

SOCIALACCOUNT_PROVIDERS = {
    'slack': {
        'SCOPE': ['email', 'openid', 'profile', 'identity.basic'],
        'AUTH_PARAMS': {'response_type': 'code'},
        'ACCESS_TOKEN_METHOD': 'POST',
        'VERIFIED_EMAIL': True,
    }
}

3. 从django-allauth模型中提取token及过期时间

django-allauth会自动将Slack返回的token存储在SocialToken模型中,可通过当前用户关联的社交账号获取:

from allauth.socialaccount.models import SocialAccount, SocialToken

# 获取当前用户的Slack社交账号
slack_account = request.user.socialaccount_set.get(provider='slack')
# 提取对应的token信息
slack_token = SocialToken.objects.get(account=slack_account)

# 获取所需字段
access_token = slack_token.token
expires_at = slack_token.expires_at  # 过期时间(datetime类型)

4. 验证token有效性

通过expires_at字段判断token是否过期:

from datetime import datetime

if slack_token.expires_at and datetime.now() > slack_token.expires_at:
    # token已过期,引导用户重新授权
    pass
else:
    # token有效,可用于Slack命令调用
    pass

内容的提问来源于stack exchange,提问作者yar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:20:59