首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python-social-auth后端获取DRF令牌

从python-social-auth后端获取DRF令牌
EN

Stack Overflow用户
提问于 2021-05-12 17:30:38
回答 2查看 749关注 0票数 3

我正在尝试将社会认证集成到我的DRF后端中。我决定和python-社会-auth一起去。如果我通过Django (和HTML视图)提供我的社交登录,我可以看到我的登录是成功的。我还认为,我可以重定向后,成功的社会认证,如概述的这里

直到现在,我的前端程序(一个Nuxt应用程序)都在使用DRF令牌。即使:

  1. 我可以为社会帐户创建有效的令牌。
  2. 我的前端可以将用户重定向到->完全授权的OAuth站点,例如Google,Twitter ->返回到前端。

我是否可能设法将经过成功身份验证的用户重定向到前端,并使用关联的、有效的DRF令牌作为查询参数?

EN

回答 2

Stack Overflow用户

发布于 2021-05-13 02:13:53

你可以,这可不是小事。这是可能的,因为检索URL(成功或错误的URL)的机制被委托给方法,它最终调用关于最终实现。此方法可以重写以添加自定义逻辑。

这些步骤应该能让你上路:

  1. 定义自定义策略 从social_django.strategy导入DjangoStrategy类CustomStrategy(DjangoStrategy):def get_setting(self,name):如果名称==‘LOGIN_REDIRECT_URL: token = get_drf_token()返回f'/?toke={token}’URL:返回Super().get_setting(名称)
  2. SOCIAL_AUTH_STRATEGY设置指向此新策略(导入路径语法)
票数 3
EN

Stack Overflow用户

发布于 2021-05-13 10:58:09

除了使用自定义策略(我认为这更像是库的风格)之外,还有另一个明确的解决方案:

由于python-social-auth允许在成功的身份验证后重定向,所以打开另一个端点,该端点将a.生成一个令牌b.重定向到前端。所以我定义了遵循api_view

代码语言:javascript
复制
@api_view(http_method_names=['get'])
def user_token(request):
    if request.user.is_authenticated:
        token, e = Token.objects.get_or_create(user=request.user)
        return redirect('<front-end>/?token='+token.key)
    else:
        return redirect(`<front-end>/login/?error=true')

现在,一个潜在的身份验证流如下所示:

用户访问前端->点击‘登录使用Github et.al。’->登录在第三方(例如,Github)的->回到后端/success/ ->重定向到前端url (基于上述视图),使用令牌->处理前端上的查询参数(在我使用Nuxt的情况下,这非常简单)。

如果我们在path /success/token/上挂载/success/token/,那么一旦用户访问:http:<backend>:/login/github/?next=/success/token/,用户部分上的每一个正确步骤都会将他/她带到前端,将查询param token设置为正确的标记。

更新:只有在DRF具有会话身份验证活动的情况下才能工作,否则request.user.is_authenticated永远不可能是真。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67508421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档