我允许用户使用OpenID,Twitter OAuth或FBConnect登录我的网站。如果用户尝试转到要求他们登录的页面,则在该用户登录后我想将他们发送回该页面。是否有一种简单的方法可以完成所有这些或者我应该只是将重定向页面写入cookie并在成功登录后将它们发送到该页面?我正在使用Django所以如果有任何好的提示或技巧涉及到那将是伟大的。
感谢提前输入!
答案 0 :(得分:2)
您可以将该参数(他们所在的页面)作为参数传递给return_to
。如the spec中所述:
注意:return_to URL可以用作依赖方将身份验证请求的上下文附加到身份验证响应的机制。本文档没有定义RP可以确保外部各方不修改查询参数的机制;这种机制可以由RP本身定义。
例如:
def sendOpenIDCheck(...):
# after getting an AuthRequest from Consumer.begin
return_to = oidutil.appendArgs(return_to,
{'destination_url': that_place_they_tried_to_go})
return redirect(auth_request.redirectURL, realm, return_to))
def handleReturnTo(request):
# after doing Consumer.complete and receiving a SuccessResponse:
return redirect(request.GET['destination_url'])
如果您需要跟踪某些其他状态(例如POST数据),或者您有一个非常长的网址,您无法将其作为查询参数,或者您需要destination_url
被篡改用户,您将该信息存储在服务器端,将密钥作为查询参数而不是URL发送,并在他们返回时查找。
与在会话中存储它没有什么不同,除非用户在一个会话中有多个同时的选项卡运行到此,然后在查询中使用它有帮助。
答案 1 :(得分:1)
可悲的是,OAuth和OpenID并不真正了解您的应用状态(OAuth WRAP可以)。所以你必须采取以下假设:
然后您可以执行以下操作:
如果用户违反了这个假设,这将导致奇怪的行为,但我认为你没有任何办法可以规避这一点。