使用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
相关产品推荐
相关产品推荐

