2015-07-12 92 views
2

我使用的是django 1.8.3和django-allauth 0.21.0,我希望用户能够使用例如他们的Google帐户不会离开网页。原因是他们登录的网页上有一些有价值的数据,需要在登录后发布。我已经使用本地帐户创建工作正常工作,但我在社交方面遇到了问题因为许多社交网络将用户引导到单独的页面以请求许可等。理想情况下,我将在我的页面上发生一种模式,所有这些都会在身份验证成功后关闭。在不离开页面的情况下使用django-allauth的社交登录

我现在可以想到的唯一可能的(虽然不是理想的)解决方案是强制认证页面在另一个选项卡中打开(例如,在链接中使用target =“_ blank”),然后提示用户一旦在另一个选项卡中完成身份验证,就可以在原始窗口中点击返回的内容。

但是,这里的问题是,我不能想出一种方法让原始页面知道哪个帐户刚刚由以前的匿名用户创建,而没有让他们刷新页面,这会导致重要的数据需要张贴丢失。

有没有人有任何关于如何完成上述两种解决方案之一的想法?

+0

相关:http://stackoverflow.com/questions/16162108/implementing-ajax-requests-response-with-django-allauth –

+0

@GlynJackson是的,我实际上用这个问题的一些信息来实现本地注册/登录的东西(我有工作),但我很难从这个跳转到社交。如果你指的是Pennersr说我“运气不好”,我还没准备好轻易放弃! –

+1

这不仅仅是本地存储的规范用例吗?根据数据的性质,yiu也可以将其编码到OAuth舞蹈中保存的'code'参数中。 – pinoyyid

回答

1

我最终通过使用Django的会话框架解决了这个问题。事实证明,会话ID是由django-allauth自动通过oauth过程传递的,因此在登录完成后,存储在request.session中的任何内容都可以在另一端访问。

0

一种选择是主窗体在新窗口中弹出社交身份验证,然后使用AJAX来查询社交身份验证是否已完成。只要你对这个性能特征很好(这会影响你的服务器),那么这可能是最简单的解决方案。

+0

这听起来像它可以工作我,但我不知道从哪里开始实施这样的事情。你介意编辑你的答案以提供更多的信息,即一些粗略的代码让AJAX确定社交认证是否在另一个窗口中完成? –