我正在尝试将社会认证集成到我的DRF后端中。我决定和python-社会-auth一起去。如果我通过Django (和HTML视图)提供我的社交登录,我可以看到我的登录是成功的。我还认为,我可以重定向后,成功的社会认证,如概述的这里。
直到现在,我的前端程序(一个Nuxt应用程序)都在使用DRF令牌。即使:
我是否可能设法将经过成功身份验证的用户重定向到前端,并使用关联的、有效的DRF令牌作为查询参数?
发布于 2021-05-13 02:13:53
你可以,这可不是小事。这是可能的,因为检索URL(成功或错误的URL)的机制被委托给方法,它最终调用关于最终实现。此方法可以重写以添加自定义逻辑。
这些步骤应该能让你上路:
SOCIAL_AUTH_STRATEGY设置指向此新策略(导入路径语法)发布于 2021-05-13 10:58:09
除了使用自定义策略(我认为这更像是库的风格)之外,还有另一个明确的解决方案:
由于python-social-auth允许在成功的身份验证后重定向,所以打开另一个端点,该端点将a.生成一个令牌b.重定向到前端。所以我定义了遵循api_view
@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永远不可能是真。
https://stackoverflow.com/questions/67508421
复制相似问题